本地与远端关联

本地已经通过git init初始化过项目

具体操作步骤

  1. 本地初始化

    1
    git init
  2. 添加文件到暂存区

    1
    2
    git add .
    git commit -m 'feat: desc'
  3. 添加远程仓库

    1
    git remote add origin ***(your project https or ssh link)
    • 通过https方式无需配置ssh-key,提交代码的时候需要输入对应托管平台的账号和密码
    • 通过ssh-key方式需要配置公钥

    • 关于https方式和ssh-key方式更多的内容,我会在后续的整理中给出,这里留下一个入口标记[关于https和ssh-key的介绍]
  4. 本地仓库与远程仓库关联

    1
    git branch --set-upstream-to=origin/master master
  5. 拉取远程数据

    1
    git pull --rebase
    • 关于rebase命令,我会在后续的整理中给出,入口标记[rebase]
  6. 上传代码
    1
    git push

本地未初始化过

操作步骤

  1. 在工作目录(workspace)下,直接通过命令完成
    1
    git clone ***(your project https or ssh link)

移除与远端的关联

1
git remote remove origin

新建分支并同步到远端

  1. 在当前分支上新建分支

    1
    git branch test
  2. 切换到test分支

    1
    git checkout test

    小贴士:1、2合并的命令

    1
    git checkout -b test
  3. 提交到远端

    1
    git push origin test

删除分支

ps:不可删除,当前所在的工作分支。

删除一个已经终止的分支,个人理解是所有在这个分支的操作已经merge到master上了

1
git branch -d 分支名称

删除一个代码未merge到master上的分支

1
git branch -D 分支名称

删除远程分支

1
git push origin :分支名称

查看分支

  1. 查看所有远程分支

    1
    git branch -r
  2. 查看远程和本地所有分支

    1
    git branch -a
  3. 查看本地分支

    1
    git branch
  4. 查看本地分支和远程分支映射关系

    1
    git branch -vv

在输出结果中,前面带* 的是当前分支

.gitignore未生效

三部曲

1
2
3
git rm -r --cached .
git add .
git commit -m 'update .gitignore'

.gitignore中未配置忽略规则,确莫名其妙的忽略了一些文件

前置判断可以执行

1
git status --ignored

通过输出查看忽略的文件是否在 Ignored files:

如果存在

临时解决

1
git add -f 文件名称

彻底解决

  1. 查看配置信息

    1
    git config --list
  2. 在列表中看下是否有如下配置

    1
    core.excludesfile=/Users/***/.gitignore_global

    找到这个文件,查看其忽略规则。
    工作中遇到的问题,都是这个文件捣鬼,未发现其他情况。

  3. 执行ignore未生效三部曲

    不想commit,切换到其他分支

    使用stash命令,使用这个命令首先要知道如何管理它。

  4. 查看当前stash列表

    1
    git stash list
  5. 删除某一个stash

    1
    git stash drop stash@{0} (这个[stash@{0}],通过 git stash list 获取)
  6. 查看stash的修改内容

    1
    git show stash@{0}
  7. 应用任意一次修改,不论你在那个分支上进行的stash,其他分支都可以共享这个stash。

    1
    git apply stash@{0}
  8. 弹出最近一次stash

    1
    git stash pop
  9. 清空stash栈

    1
    git stash clear

清楚上述命令后,可以稍微安心的使用stash了。

1
2
3
4
5
6
7
git stash save "stash描述" (建议使用这种方式)
```
# stash drop|clear 后悔了
## drop
1. drop后有类似如下的提示
``` sh
Dropped refs/stash@{0} (f9b6c81bf239a874840ab729870e49f79cbff958)
  1. 根据f9b6c81bf239a874840ab729870e49f79cbff958
    1
    2
    git show f9b6c81bf239a874840ab729870e49f79cbff958 查看并确认修改内容
    git merge f9b6c81bf239a874840ab729870e49f79cbff958 恢复

clear

  1. 找到clear操作的id

    1
    git fsck --lost-found

    输出如下

    1
    2
    3
    4
    5
    6
    Checking object directories: 100% (256/256), done.
    dangling commit 095a68ed29ac9e09f88fb9e6e6bd6d4ff45a8d45
    dangling commit 1a10d5b7d7a7e1f43b07933b5a8e2f8e61763286
    dangling blob 30c413b2d803da68c710e101198545aad8ba6555
    dangling commit 44facef732da848b74e477e5b6f608669d4a1ee2
    dangling tree 475646ae455bb20e4b9b69e3bb4860a95f34dd01
  2. 查看并确认

    1
    git show 095a68ed29ac9e09f88fb9e6e6bd6d4ff45a8d45
  3. 恢复

    1
    git merge  095a68ed29ac9e09f88fb9e6e6bd6d4ff45a8d45

合并多个commit

查看提交日志确定合并哪些commit

1
git log(可以下载一个git可视化查看的插件 gitk\gitg等)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
commit f5ec76eb3929e229a993c9a3e689e591398302ec
Author: ******
Date: Tue Dec 11 09:44:07 2018 +0800

doc: doc1

commit e9c2e91b943dfd53ca7a979bddcb6e94e01b800f
Author: ******
Date: Tue Dec 11 09:35:07 2018 +0800

doc:doc

commit ac1c9497a2a90d5ac2fb9cdc3fd57888c9548cbe
Author: ******
Date: Mon Dec 10 16:16:22 2018 +0800

feat: leetcode算法链表反转

我要将最后二次的合并

1
git rebase -i HEAD~2

进入编辑页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
pick e9c2e91 doc:doc
pick f5ec76e doc: doc1

# Rebase ac1c949..f5ec76e onto ac1c949 (2 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

根据Commands提示 选择s进行合并

1
2
pick e9c2e91 doc:doc
s f5ec76e doc: doc1

esc:wq进入message编辑页面

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# This is a combination of 2 commits.
# This is the 1st commit message:

doc:doc

# This is the commit message #2:

doc: doc1

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date: Tue Dec 11 09:35:07 2018 +0800
#
# interactive rebase in progress; onto ac1c949
# Last commands done (2 commands done):
# pick e9c2e91 doc:doc
# s f5ec76e doc: doc1
# No commands remaining.
# You are currently editing a commit while rebasing branch 'master' on 'ac1c949'.
#
# Changes to be committed:
# modified: RocketMQ.md
# new file: SwapNodesInPairs.md

修改message

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# This is a combination of 2 commits.
doc: 合并doc
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# Date: Tue Dec 11 09:35:07 2018 +0800
#
# interactive rebase in progress; onto ac1c949
# Last commands done (2 commands done):
# pick e9c2e91 doc:doc
# s f5ec76e doc: doc1
# No commands remaining.
# You are currently editing a commit while rebasing branch 'master' on 'ac1c949'.
#
# Changes to be committed:
# modified: RocketMQ.md
# new file: SwapNodesInPairs.md

esc:wq保存退出。

1
2
3
4
5
[detached HEAD d30215f] doc: 合并doc
Date: Tue Dec 11 09:35:07 2018 +0800
2 files changed, 108 insertions(+)
create mode 100644 SwapNodesInPairs.md
Successfully rebased and updated refs/heads/master.

获取远端分支

1
2
git pull <远程库名> <远程分支名>:<本地分支名>
git pull origin dev:local_dev

通过tag,实现版本的管理

  1. 创建标签

    1
    git tag -a v1.0.0 -m 'release 1.0.0 version'
  2. 删除标签

    1
    git tag -d v1.0.0
  3. 显示tag信息

    1
    git show v1.0.0
  4. 给指定的commit打标签

    1
    git tag -a v0.0.9 ac1c9497a2a90d5ac2fb9cdc3fd57888c9548cbe -m 'commit tag'
  5. 发布标签

    1
    2
    git push origin v1.0.0 //指定发布
    git push origin --tags //发布所有
  6. 查看tag列表

    1
    git tag
  7. 根据tag创建分支

    1
    git branch 分支名称 tag名称

commit内容写错,重新编辑

最近一次

  1. 如果未push,可以重新编辑,执行命令后会进入vim编辑器

    1
    git commit --amend
    • 关于vim基本使用,我会在后续的整理中给出,入口标记[关于vim]
  2. 如果已经push了,在上一步的基础上执行下面的命令

    1
    git push origin master --force
    • 强制更新有风险,使用需谨慎!在你强制更新的时候,如果别人也commit了代码,将会被你的强制更新覆盖!

任意一次、多次提交修改

  1. 第一步

    1
    git rebase -i HEAD~3

    或者 通过需要修改的父commit的id进行rebase,通过git log命令,commit后面那个。

    1
    git reabse -i commitid(需要修改的父commitid)

    *为什么有父子关系,我们在后续整理中给出解释git数据结构

  2. 执行命令后进入,进入vim编辑器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    pick 9a15ece doc: edit1
    pick 4181834 doc: edit2

    # Rebase ff8c74d..4181834 onto ff8c74d (2 commands)
    #
    # Commands:
    # p, pick = use commit
    # r, reword = use commit, but edit the commit message
    # e, edit = use commit, but stop for amending
    # s, squash = use commit, but meld into previous commit
    # f, fixup = like "squash", but discard this commit's log message
    # x, exec = run command (the rest of the line) using shell
    # d, drop = remove commit
    #
    # These lines can be re-ordered; they are executed from top to bottom.
    #
    # If you remove a line here THAT COMMIT WILL BE LOST.
    #
    # However, if you remove everything, the rebase will be aborted.
    #
    # Note that empty commits are commented out

    根据提示,将需要修改的地方,将pick修改成r或者reword,下面步骤中忽略#Rebase以下的注释

    1
    2
    pick 9a15ece doc: edit1
    r 4181834 doc: edit2

    保存退出:wq,进入下一步操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    doc: edit2

    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    #
    # Date: Tue Dec 4 15:54:03 2018 +0800
    #
    # interactive rebase in progress; onto ff8c74d
    # Last commands done (2 commands done):
    # pick 9a15ece doc: edit1
    # r 4181834 doc: edit2
    # No commands remaining.
    # You are currently editing a commit while rebasing branch 'master' on 'ff8c74d'.
    #
    # Changes to be committed:
    # modified: test.txt

    doc: edit2修改即可。:wq保存退出。

  3. 如果想要与远端同步执行 最近一次提交步骤2 即可

Git操作——删除untracked files

删除 untracked files

1
git clean -f

连 untracked 的目录也一起删掉

1
git clean -fd

留言

⬆︎TOP