Git

Git

Posted by Wang Zhihao on December 4, 2022

Git

简单记录一下git使用的一些技巧。

git add

最好不要用 git add .,因为你不知道自己会加进来什么,推荐的方式是:先用 git status,check自己的改动了哪些文件,然后挨个进行添加:git add xxx.

如果是第一次的话,文件有比较多,可以用 git add .,但是这个时候需要善用.gitignore 文件,将不需要添加的文件和文件夹写进来,下面是个例子:

# some example for .gitignore
test.txt # ignore test.txt
*.log # ignore all file end with ".log"
/exps # ignore exp folder

git commit

记得一定-m 写清楚这次的修改

git pull

注意pull的时候一定保证本地分支与远程分支是同一个分支,否则他会auto merge,撤销会很麻烦。

git fetch

如果我要从远程拉下来一个新的分支,但是不想和本地的merge,就需要用到 git fetch,本质上 git pull = git fetch + git merge

git push

这个是大家经常使用的,需要注意的是最好能 git push origin local_branch:remote_branch 带上branch的name,这样更好一些。

git stash

暂存,这个是一个非常有用的功能,如果你现在有未commit的修改,但是要进行一些git操作,比如merge之类的。这个时候就需要用到暂存,他可以把现在还没有commit的code给暂存下来,可以在一个clean的git上进行操作,最后再把这个apply回来。用法如下:

git stash 
git apply 0
git drop 0

这里有几个点需要注意,第一个是他会默认stash的名字是0,第二个是在apply之后,他并不会被删除,需要手动drop才能删除。

下面有个非常dirty的情形,可以使用stash解决燃眉之急:

你和另一个同事在同一个分支上开发(这是个非常愚蠢的行为,实际中千万别这样做)这里就假设你有一个愚蠢的同事,他在你的分支上开发,并且commit以及push到了远程,而你,你在本地的该分支上进行开发,但是还没有commit。

此时,你的愚蠢的同事告诉你,他已经把他的修改push到了这个分支,并且大概率,和你现在正在写的代码有冲突。于是你先臭骂了他一顿,之后来收拾这个烂摊子。

这个时候git stash 就能解决你的燃眉之急,先把手头的code stash一下,然后把他的code pull下来,然后再将你的code apply回去,此时会auto merge,你需要手动处理冲突,然后把手头的工作搞定以后commit以及push,就可以救回来。

最后千万记得不要再让你的愚蠢的同事干这种事情了。

git rebase

squash

想象一下,你很开心的完成了一部分code,然后你兴冲冲的commit了你的代码,结果发现忘记在readme写这部分的使用说明了,因此你又commit了一次,之后你有发现你的readme里有个拼写错误,然后你又commit了一次,我们来看下你的这三次commit:

git commit -m "add xxx feature"
git commit -m "fix readme"
git commit -m "fix typo"

这三次骑士只完成了一个内容,如果经常这样的话,就会让你的commit记录变得非常长,而且混乱,有没有一个办法可以把这三个commit合成一个呢?

有,就是接下来要说的基于rebase的squash