[英]Git commit disappeared after merge
我正在與一些協作者合作進行一個項目,每個協作者都有master分支的遠程副本,該副本可能與原始master分支有關,也可能沒有。
假設其中一個協作者由於提交X
而提交了一個過時的副本,提交了一些Y
並嘗試將其推到origin分支。 它失敗,並且協作者合並更改並再次成功推送,這一次成功。
現在,當查看存儲庫的歷史記錄時,不再可以找到提交X
,除了它的更改現在位於另一個名為Merge branch 'master' of https://....
提交中。
這是git的正常行為嗎? 這使得很難跟蹤更改。 有什么辦法可以避免這個問題?
提前致謝!
當使用git merge
時,這對於Git來說是完全正常的行為。 Git merge將源分支中的提交替換為目標分支中的單個合並提交。
保留歷史記錄的一種方法是改用git rebase
。 在重新設置基礎時,您的協作者將首先從遠程master
分支引入更改,然后再重新提交其工作。 這會將他的本地master
置於遠程控制之前,而他只需將其更改推入即可。請考慮下圖:
remote: A -- B -- C -- X
local: A -- B -- C -- Y
在執行git rebase origin/master
該圖將如下所示:
remote: A -- B -- C -- X
local: A -- B -- C -- X -- Y'
其中Y'
是您的協作者的原始Y
提交,略有修改。 現在,您的協作者處於令人羡慕的位置,可以將其工作直接推到遠程master
分支上。 從其master
分支執行git push origin master
之后,該圖將如下所示:
remote: A -- B -- C -- X -- Y'
local: A -- B -- C -- X -- Y'
現在,您的協作者的提交在遠程master
分支中完整顯示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.