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…