Git笔记

shortcut

oh-my-zsh提供一些很有用的alias,例如gd -> git diff, gco -> git checkout等等.

用git pull –rebase

我一般不用git pull,只用git pull --rebase,因为前者会产生一个多余的merge信息。

设置upstream

所谓的upstream就是一个有最新代码的地方,你需要时不时的同步下。绝大多数情况下是不会直接向upstream push代码的。

这个时候可以设置一个upstream的remote,但不推荐建立一个本地的branch进行tracking,因为毕竟不会改动upstream的代码。要与upstream同步的时候可以用

git rebase upstream/master

不确定的时候最好用下git branch -vv。只要你没改变push.default值,应该就不会有问题。

detached HEAD

当你check out过去的某个commit的时候,你会进入一个detached HEAD的状态。如果你只是查看代码的话,用

git checkout <branch-name>就可以直接回到HEAD。

如果想做什么改动的话可以新建一个branch然后commit改变。

rebase还是merge

如果改变比较大,用merge,如果改变比较小rebase。rebase的好处在于能够保留commit信息。

历史

很多时候想知道某几行是谁改变的,这个时候可以用git blame -L150,+11 <filename>

如果想知道这几行代码的改变历史是什么样的,可以使用git log -L 155,155:<filename>

找到相应的commit之后,用git show <commit hash>显示该commit具体的信息.

diff-so-fancy

diff-so-fancy用inline的方式显示diff, 改变一目了然.

.gitignore

有的时候commit之后才加.gitignore的,可以这样删除已经被track的文件

1
2
3
git rm -r --cached .
git add .
git commit -m "Removing all files in .gitignore"

The purpose of gitignore files is to ensure that certain files not tracked by Git remain untracked.
To stop tracking a file that is currently tracked, use git rm –cached.