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

    猜你喜欢

    转载自blog.csdn.net/randompeople/article/details/80890381