【基础篇】git高级操作

Rebase

改命令可以说和merge命令得到的结果基本是一致的
通常merge操作将分支上的代码合并到master中,分支样子如下所示

https://user-gold-cdn.xitu.io/2018/4/23/162f109db27be054?w=505&h=461&f=png&s=22796

使用rebase后,会将develop上的commit按顺序移到master的第三个commit后面,分支样子如下

https://user-gold-cdn.xitu.io/2018/4/23/162f11cc2cb8b332?w=505&h=563&f=png&s=26514

rebase对比merge
优点:

  • 合并后的结果很清晰,只有一条线

缺点:

  • 如果一旦出现冲突,解决冲突很麻烦,可能要解决多个冲突,但是merge出现冲突只需要解决一次

使用rebase应该在需要被rebase的分支上操作,并且该分支是本地分支。

1
2
3
4
5
## branch develop
git rebase master
git checkout master
## 用于将 master 上的 HEAD 移动到最新的commit
git merge develop


stash

stash用于临时保存工作目录的改动。开发中可能会遇到代码写一半需要切分支打包的问题,如果这时候你不想commit的话,就可以使用该命令

1
git stash

使用该命令可以暂存你的工作目录,恢复如下

1
git stash pop


reflog

reflog可以看到HEAD的移动记录,加入之前误删了一个分支,可以通过git reflog看到移动HEAD的哈希值

https://user-gold-cdn.xitu.io/2018/4/23/162f14df98ce3d83?w=950&h=118&f=png&s=77151

从图中可以看出,HEAD的最后一次移动行为是merge后,接下来分支new就被删除了,那么我们可以通过以下命令找回new分支

1
2
git checkout 37d9aca
git checkout -b new

reflog 记录是时效的,只会保存一段时间内的记录。


Reset

如果你想删除刚写的commit,就可以通过以下命令实现

1
git reset --hard HEAD^

但是reset的本质并不是删除了commit,而是重新设置了HEAD和它指向的branch。

坚持原创技术分享,您的支持将鼓励我继续创作!