簡體   English   中英

在提交到當前頭部之前合並Git狀態

[英]Merge Git state before a commit into current head

如何在錯誤提交到Git中的當前頭部之前合並狀態?

別人錯誤地合並了服務器,將我的更改重置了,在我獲取並合並了遠程主分支后,我的更改在本地消失了。 同時,更正確的提交被推送到遠程服務器,並停留在master分支的當前頭上。

我需要先合並狀態,然后再將錯誤的合並發生到我當前的主腦袋中。

我該如何實現?

我已經嘗試過@Drecker的答案

git revert -m 2 <SHA_hash_of_merge_commit>

現在我已經恢復了正確的文件內容,但是我從第二個人那里丟失了正確的文件內容。 我承諾了,但不推。 我從中創建了一個新的分支restore 現在,第二個人的內容在遠程master分支中正確,而我的內容在本地restore分支中正確。

如何重新合並兩個分支,以便兩個分支都具有正確的內容?

更新:您可能讀過這篇文章: 撤消尚未推送的Git合並

要“撤消”已提交(並推送)的合並,您可以使用

git revert -m <parent_number> <SHA_hash_of_merge_commit>

parent_number是該合並的父級的索引數目-這是必需的,因為git不會知道您要拒絕哪個分支(從1開始索引)。 這樣,將創建一個新的提交,刪除被拒絕分支創建的所有更改。

使用其他(不推薦)選項

git rebase -i <SHA_of_commit_to_which_you_want_to_change_histrory>

這樣,您將交互式地選擇要在當前HEAD中選擇的提交,而不是

警告:這樣您實際上可以更改git歷史記錄! 您可能會丟失一些更改(其他任何分支都沒有),並且當您的同事提出更改時會引起更多問題

您需要在第一次合並之前恢復狀態。

您可以通過以下方式使用git reflog + git reset來接收它(我假設分支是master):

git reflog master

將返回本地主引用的歷史記錄,類似於以下輸出:

1904ece master@{0}: commit: fixed styles
ba185a3 master@{1}: commit: fade transition for angular pages|
b06d0a5 master@{2}: commit: fixed detail view
792af52 master@{3}: commit (merge): Merge branch 'origin/master' into master
128dd58 master@{4}: commit: fixed save of searchs
...

注意合並提交,用“ commit( merge )”表示,也許其中的一個是您試圖“撤消”的合並提交,要繼續,可以使用git reset命令,這種方式:

git stash # save all local changes on index and WC just in case
git reset --hard master@{4}

注意我在這里使用master @ {4},因為發現合並提交為master @ {3}

完成此操作后,您將需要再次拉並執行合並,您可以根據需要重新執行合並操作多次

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM