文章目录
  1. 1. diff操作
    1. 1.1. 在没有使用git add的时候,也就是文件还在工作目录当中的时候,查看修改了那些代码:
    2. 1.2. 在git add之后,git commit之前,查看代码变化,也就是查看暂存区的代码变化:
    3. 1.3. git commit之后,查看代码变化,也就是查看git仓库的代码变化:
  2. 2. 撤销操作
    1. 2.1. 撤销对文件的修改
    2. 2.2. 提交信息写错了,尝试重新commit
    3. 2.3. 撤销掉commit,回退到上一个版本
    4. 2.4. commit的message写错了,想改动,使用git rebase -i偷天换日
    5. 2.5. 不小心commit了多次,但是想把commit合并,增加message的可读性
  3. 3. git分支
    1. 3.1. 查看分支
    2. 3.2. 创建分支
    3. 3.3. 切换分支
    4. 3.4. 合并分支
    5. 3.5. 合并分支,解决冲突
    6. 3.6. 删除分支
    7. 3.7. 远程分支
  4. 4. 从远程仓库fetch代码
    1. 4.1. 直接使用git pull
    2. 4.2. 使用git fetch 和 git rebase origin来代替git pull

diff操作

在没有使用git add的时候,也就是文件还在工作目录当中的时候,查看修改了那些代码:

1
git diff

git add之后,git commit之前,查看代码变化,也就是查看暂存区的代码变化:

1
git diff --cached

或者

1
git diff --staged

git commit之后,查看代码变化,也就是查看git仓库的代码变化:

要用到git lg来查找哈希码,比如77948e7

1
git show 77948e7

撤销操作

撤销对文件的修改

撤销对文件名为file的文件的修改,当file仅仅存在于工作目录当中有效

1
git checkout -- file

提交信息写错了,尝试重新commit

比如commit之后发现需要再加上一个文件

1
2
3
git commit -m 'initial commit'
git add forgotten_file
git commit --amend

最终你只会有一个提交,第二次提交将代替第一次提交的结果。

撤销掉commit,回退到上一个版本

先使用git lg 来查出想要回退的哈希码,比如说是 77948e7

1
git reset --hard 77948e7

就将代码回退到哈希码对应的版本了

commit的message写错了,想改动,使用git rebase -i偷天换日

先使用git lg查询出哈希码,比如说是 77948e7

1
git rebase -i 77948e7

这就弹出了启动了git的编辑器,如果前面编辑器默认选的是vim,这里就启动vim

1
2
3
4
5
6
pick e353fbc Release LevelDB 1.17
pick 803d692 Release 1.18
pick c00c569 Deleted old README file.
pick cea9b10 Fixed incorrect comment wording for Iterator::Seek.
pick c4c38f9 Add arm64 support to leveldb.
pick b234f65 Added a new fault injection test.

把pick改成edit或者e,然后退出vim,按照提示,接下来一步应该是

1
git commit --amend

会再次启动vim,

1
2
3
4
5
服务端网络编程中需要注意点

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#

可以看到message就是第一行的字符串,然后只需要改第一行,保存并退出
随后在命令行执行

1
git rebase --continue

再次进入git lg,可以看见message已经改变了

不小心commit了多次,但是想把commit合并,增加message的可读性

和上面一样,启动

1
git rebase -i 77948e7

但是这次只需要把pick改成fixup或者f,就可以了

git分支

这个话题可太大了,官网上的git分支手册都有那么长。但是我认为最简单一句话能概括分支就是:从产生分支的那一刻开始,主干的代码和分支代码是一致的,但是往后主干和分支就是两条线了,其实可以看做两个project。和两个project不同的地方在于主干和分支可以使用命令merge简单合并,但是两个project不行。

查看分支

查看本地分支

1
git branch

查看远程分支

1
git branch -r

-r是remote的意思
查看全部分支,就是本地分支和远程分支一起展示出来

1
git branch -a

-a是all的意思

创建分支

1
git branch from_author

这样,就创建了一个名为from_author的分支

切换分支

切换到from_author的分支

1
git checkout from_author

创建分支和切换分支二合一:

1
git checkout -b from_author

-b是branch的意思。这个命令我经常使用

合并分支

如果你在master分支上,想要合并from_author分支,只需要执行

1
git merge from_author

合并分支,解决冲突

冲突的产生:
比如我现在在master分支上,修改了index.md这个文件,加上一行”this is master” 然后git add .git commit -m"a"
然后切换到from_author分支上,也修改index.md这个文件,加上一行”this is from_author”然后git add .git commit -m"b"
现在我再次切换回master,使用git merge from_author来合并分支:

1
2
3
Auto-merging index.md
CONFLICT (content): Merge conflict in index.md
Automatic merge failed; fix conflicts and then commit the result.

将出现CONFLICT错误。
这个时候git是没有办法帮你的,只能够手动修改index.md文件,把冲突去掉,再次commit一下。手动修改index.md是唯一解决冲突的方法。
如果不知道有哪些文件有冲突的话,使用grep来查找

1
grep -Ir "<<<\ HEAD" ./

删除分支

1
git branch -d from_author

-d就是delete的意思

远程分支

使用git branch -r展示所有远程分支,可以看见远程分支的命名都是(remote)/(branch) 形式命名。其实关于远程分支我也只需要记住这一点。

远程仓库名字 “origin” 与分支名字 “master” 一样,在 Git 中并没有任何特别的含义一样。 同时 “master” 是当你运行 git init 时默认的起始分支名字,原因仅仅是它的广泛使用,“origin” 是当你运行 git clone 时默认的远程仓库名字。

从远程仓库fetch代码

直接使用git pull

拉取远程master分支

1
git pull origin master

使用git fetch 和 git rebase origin来代替git pull

git 少用pull 多用fetch和merge这篇文章阐述了使用fetch来代替pull的原因,其实我觉得多数情况之下pull是没什么问题的。
下面是git fetch的使用方法:
首先使用git remote -v来查看git的远端代码

1
2
origin  git@github.com:username/project.git (fetch)
origin git@github.com:username/project.git (push)

这个意思就是说当fetch的时候,origin代表了git@github.com:username/project.git,当pull的时候,origin代表了git@github.com:username/project.git
那么拉取代码使用

1
git fetch origin

把从origin拉取下来的代码合并到本地使用

1
git rebase origin
文章目录
  1. 1. diff操作
    1. 1.1. 在没有使用git add的时候,也就是文件还在工作目录当中的时候,查看修改了那些代码:
    2. 1.2. 在git add之后,git commit之前,查看代码变化,也就是查看暂存区的代码变化:
    3. 1.3. git commit之后,查看代码变化,也就是查看git仓库的代码变化:
  2. 2. 撤销操作
    1. 2.1. 撤销对文件的修改
    2. 2.2. 提交信息写错了,尝试重新commit
    3. 2.3. 撤销掉commit,回退到上一个版本
    4. 2.4. commit的message写错了,想改动,使用git rebase -i偷天换日
    5. 2.5. 不小心commit了多次,但是想把commit合并,增加message的可读性
  3. 3. git分支
    1. 3.1. 查看分支
    2. 3.2. 创建分支
    3. 3.3. 切换分支
    4. 3.4. 合并分支
    5. 3.5. 合并分支,解决冲突
    6. 3.6. 删除分支
    7. 3.7. 远程分支
  4. 4. 从远程仓库fetch代码
    1. 4.1. 直接使用git pull
    2. 4.2. 使用git fetch 和 git rebase origin来代替git pull