Git高级操作

1.git cherry-pick A B C

git cherry-pick

假如我们有两条分支master和dev,现在我们要将dev分支上的feature D和feature E合并到master上要怎么办呢?

  • 方法一:首先切换到dev分支,查看各项commit-id,然后切换到master分支上,也是master的最新提交C处。之后使用git merge D,git merge E。
1
2
3
4
5
git checkout dev
git log
git checkout master
git merge D
git merge E
  • 方法二:首先也要查看dev上的commit-id,然后在C上使用git cherry-pick D E。
1
2
3
4
git checkout dev
git log
git checkout master
git cherry-pick D E
  • 好像两个方法优劣对比不是很强,但是cherry-pick后跟的commit-id可以有很多个,当需要抓取的feature较多时方法二的优势就出来了。

  • 注意,如果是 HEAD 上游的提交,那就不能用cherry-pick抓取过来,因为很明显不能将同一分支上的历史提交再次提交。

2.git rebase

  • 多人协作大家基本习惯了merge的方式进行提交代码。但是最大的弊端就是提交历史变得有许多平行线。实际的确也是并行开发,但是当要追踪修改历史的时候,嗯,你可以冲上一杯咖啡了哈哈哈。

  • 先更新master分支,在dev分支上使用命令

    git rebase master
    这样看起来就像是在master上的节点检出的分支又再次合并回主分支,这样整个提交树就非常线性,易于追踪。

  • 另一个操作是

    git rebase -i commit-id
    这个命令可以“可视化操作提交历史”,有丢弃,修改,排序等功能,可以使用上述的cherry-pick命令代替。本人觉得在命令行操作哪有什么可视化操作哈哈哈。

  • 需要注意的是如何在vi下编辑,按i进入编辑状态,按esc进入命令状态,在命令状态中输入:wq回车是保存并退出,:q!回车是不保存退出。更多的搜索vi命令吧。

3.git stash

这个命令挺有用,尤其是还没做完手头上的工作,又不得不做别的事(切换到别的分支治疗),并且不想因此commit,那么这系列命令对你很有用!

1
2
3
4
1.git stash 将当前未commit的修改压栈
2.git stash list 查看栈有哪些stash
3.git stash pop 弹出(恢复)栈顶修改
4.git stash clear 清空栈