git 高级用法
从另一个分支中拉取文件到当前分支
你的项目中有很多分支,你在A分支上开发,想获取B分支上的一个文件,把这个文件存到A分支上,使用命令:
git checkout (branch) -- (path/file)
从另一个分支中拉取commit 到当前分支
Git cherry-pick 可从其它分支抓取 commit 合入当前分支中,常用于从 upstream 合入 patch。
git cherry-pick commit_id
合并多个commit
有的时候,我们代码的commit很多是微小的,特别当你在调试代码的时候,忍不住的多敲一个空格,多加一些备注,这些commit 是毫无意义的,在企业里,别人review你的代码的时候也是很蛋疼的,明明3个commit可以搞定的一个bug,可能你需要 7 、8个commit ,这其实给别人review带来了很多麻烦,大家的时间都很宝贵,我们还是不要互相伤害了,所以,规范commit。
1、构造多个commit
自己去增加多个commit,然后使用 git log 查看commit 历史,
大概是这样:
第一次commit hash值:asds23dfg
第二次commit hash值:dfdfg34gg
第三次commit hash值:dncvvg9g
大概就是这个样子,我就不讲究了,我们想把“第二次 commit ”和 “第三次commit” 合并,使用git rebase方法,命令大概是:
git rebase -i <commit id>
备注:
commit id 也是hash值。
参数说明 -i其实表示的意思:选择不动的commit, 比他新的commit都可以被修改,也就是说你想从哪个commit id 开始合并,但不包括这个commit id,什么意思呢?如果你想合并“第二次 commit ”和 “第三次commit” ,那么-i 后面接着的commit id 就应该是第一次的commit id 的hash值。
于是,我们的命令就变成了:
git rebase -i asds23dfg
这样就会出现:
pick dfdfg34gg 第二次commit pick dncvvg9g 第三次commit
这里面有很多的参数,其中重点的参数是:
pick 的意思是要会执行这个 commit。
squash 的意思是这个 commit 会被合并到前一个commit。
好了,当前只有两个commit id出现在上面,我们只能把commit id 为“dncvvg9g ”的commit那一行的pick改为“squash”,因为它要合并到上一个commit,也就是commit id 为“dfdfg34gg”的那一行,修改之后,变成了:pick dfdfg34gg 第二次commit squash dncvvg9g 第三次commit
这样按“Esc”键–>
:wq
保存。
然后执行git log
,就可以看到两次的提交合在一起了。总结:如果你想合并中间两个commit id,那么也是找准位置,找准commit id,最后将最新的那个commit id 的
pick
改为squash
。同时,如果这些commit 你都提交到远程仓库里了,那么你需要使用git push -f
刷新一下,然后就可以看到远程仓库也是这样的。后续
参考博客
git合并多个commit
[Git]合并多个 Commit
还没有评论,来说两句吧...