1. 普通状况:html
你在main分支上,开出一个feature分支,在feature分支上工做git
某同事在main分支上push了新内容A2安全
若是想在feature分支获取到A2改动,则将main分支merge到feature分支,产生B1。这样git就记录了这个merge的信息。markdown
有时候咱们并不想要git记录这个merge的信息,由于这样会让git的历史记录变得很繁琐。并且会产生分叉。yii
回到merge前,若是将feature分支rebase到main分支,则是这样,是一条直线,没有分叉,至关清爽。rebase之后,老的提交B会被丢弃,会指向新建立的提交B‘。
oop
2. 有相同commit的状况:spa
好比feature分支的第1个commit B 的改动和main分支的A2是同样的。.net
那么在执行git rebase main
之后,B就直接被删除掉了。命令行
3. 在多条分支上操做的状况:code
如今想将feature1分支上的改动放到main最新改动的后面,则执行git rebase --onto main feature feature1
,将变成:
实际项目中遇到的状况:在develop上修了个bug,须要把bug的分支接到release分支上:
执行git rebase --onto release develop bug
:
(固然也能够切换到bug
分支之后,直接执行git rebase release
)
git add <filename>
命令去更新这些内容。git rebase --continue
。git rebase —abort
来中止rebase操做。回到rebase之前的状态。若是在rebase之前,feature分支不只仅是你一我的在维护,还有其余同事在维护,那么在你将feature进行rebase并push到远程仓库之后,其余同事拉取代码就会产生问题。因此当全部须要rebase的commit没有被push过,就能够安全地进行rebase。
git rebase -i HEAD~2
,进入vi窗口,查看近2个commit 3. 按键盘
a
键进入编辑模式 4. 根据图中提示进行操做,好比我想drop
掉70787b8
这个commit,将pick
改为d
。 5. 按esc退出vi窗口。输入:
:wq
保存并退出。 6. 命令行看到Successfully rebased and updated refs/heads/feature.
说明70787b8
这个commit被删除掉了。
git push -f 分支名
(实际上git push -f
就行啦)git reflog
之后,按箭头下,往下找到你想要回到的commit,复制。git reset commit_hash_id --hard
,就能回到某个版本啦。cloud.tencent.com/developer/n…