2017-11-18 301 views
1

假設我在本地分支A上有以下提交,然後我將其推送到遠程分支。從主分支中提取其他提交後,Git壓縮提交

commit 1 
commit 2 
commit 3 
commit 4 

現在,我從遠程主拉,並提交歷史看起來是這樣的 -

//From branch A 
commit 1 
commit 2 
commit 3 
commit 4 
//From master 
commit 5 
commit 6 

如果我現在要2和3使用Git變基-i和git推動壁球提交 - f,那麼重寫是否會提交5和6?如果是的話,有沒有辦法可以壓縮我之前的提交而不重寫我從主分支中提交的提交?我是Git的新手,所以請原諒我是否缺少一些非常基本的東西。

回答

2

如果您位於功能分支中並重新綁定到主設備上,則重做將不會重寫那些提交。如果你的rebase範圍碰巧提交了第5個和第6個,那麼他們會被複制和修改,但是你不會失去任何東西。這是一個正常的操作,git不會更改就地提交,新創建的任何所需的更改。在功能分支內部運行git rebase -i master將複製功能分支的唯一提交,然後在分支的更新版本上重新應用它們。

假設提交6是你的HEAD,提交5和6基本上被刪除,並且在分支的基礎被更新時重新出現在提交1之前。然後根據您的指示重放提交1-4。

但是,如果提交1是你的頭,git rebase -i master將撤銷提交1-4,並與您的壁球指令重放一遍,產生了新的歷史記錄:6 < - 5 < - 4 < - 1' ,其中承諾2人和3人被壓扁,5人和6人未受影響。

更多關於rebasing的細節和更好的解釋可以找到here

+0

工作,謝謝!在你答案的第二部分中,我假設你的意思是「如果第4條是你的頭,......」(即第5條和第6條還沒有從主方拿來)? – ankit0311

+0

它可能是。我假設你是從你的第二個例子開始的,在「現在,我從遠程主人拉」之後。美麗的部分是解決方案工作原理相同:)。 – Blue

0

如果你做什麼你建議的提交56然後內容將保持不變(如果不會有變基衝突),但他們的哈希會有所不同,因爲他們的父母會發生變化。因此它不會再承諾56,但是具有相同內容的不同。如果您確定沒有其他人正在使用該遠程分支,那麼強制推送是可以的,否則您將重寫他已經從remote中提取的內容。我個人不會這樣做remote/master

相關問題