簡體   English   中英

Git:如何在合並前返回

[英]Git: how to go back before merge

謝謝你的幫助。 我真的很困惑......

我合並了隊友的拉請求。

現在我想回到合並之前的情況,因為我已經意識到引入了錯誤。 拉請求是由朋友在24上完成的,我在24上做了合並。

  • 我需要回到20的情況。
  • 團隊成員所做的改變會發生什么? 我能再次看到/使用它們嗎?

謝謝!!!

commit ff1e9ecfa13c5050957b77bd5b5695d802415867
Merge: 053c894 437e11c
Author: me
Date:   Tue Mar 24 09:06:11 2015 +0100

Merged ' changes on xxx

commit 437e11c23ae7da68f8bb3698557bdc2aa3d9a614
Merge: a129401 adfd8c5
Author: someone else
Date:   Tue Mar 24 00:00:18 2015 +1000

Merge pull request #17 from 

xxx

commit adfd8c5c30541095ee48ce64da14740f92594ec8
Author: someone else
Date:   Mon Mar 23 23:54:06 2015 +1000

xx

commit 053c89426460ffaa86873bed342bc38e24a13096
Merge: 849ec63 35fdbc6
Author: me
Date:   Fri Mar 20 07:57:13 2015 +0100

假設您沒有刪除原始更改出現的分支,那么您的隊友的工作仍然位於該分支上,所以只要您仍然擁有更改所在的分支,我就不會擔心會丟失這些更改制作。

您可以執行git reset --hard [commit hash]以在合並之前返回提交,這就像回到過去一樣。 但是,您還將撤消在reset命令中指定的提交添加的任何更改(如果有)。

例如:

在我當前的分支上,我有以下提交:

A
|
B    <- commit *before* the merge
|
|
|  --- some other branch
| /
|/
C    <- commit where "some other branch" was merged into current branch
|
D
|
E

如果我執行git reset --hard B那么我將在C merge之前返回提交。 但是我也會在這個過程中丟失承諾DE 一旦你這樣做,只需檢查分支的狀態,並確保它看起來像你需要它,然后執行git push --force ,它將遠程倉庫更新為此狀態。 你需要的原因--force是因為你將從遠程倉庫的當前分支中刪除提交DE ,如果沒有--force選項, git將不允許你這樣做,因為你要求它刪除工作。


根據這些更改的實質程度,有時更容易前滾並修復錯誤,而不是嘗試撤消更改。 那條線(前進或后退)是個案決定。

您的隊友的提交都在您的存儲庫中,以及您所做的合並提交。 您可以將標簽放回合並之前的位置,如果您希望將來引用您的隊友提交,請添加新標簽。

這樣的事,對吧? 我想我的標簽足夠接近:

   ...053---ff1    master
           /
 ...a17---437      teammate
         /
     ...adf        other

要重置標簽,如果您最近的結帳不是master您只需將標簽強制到新的位置即可。 否則,您必須先檢查另一個引用(或普通提交)或結帳。

你想讓master回到合並的第一個父級,並且檢查它也不會那么糟糕,所以:

git tag wip
git checkout -B master master^1

現在master指的是053wip指的是ff1 ,沒有別的改變。 wip參考讓git知道你還在引用它及其歷史。 你已經在合並簽出之前獲得了master提交,而master又回到了引用它。 force-relabel-and-checkout git checkout -B $commit $ref有一個快捷方式,如果你正在移動當前的結賬, git reset --hard $ref

如果您沒有或希望主簽出:

git branch -f master master^1

並且跳過所有工作樹流失。

如果您移動標簽並且您意識到您確實應該首先標記舊提交,您可以通過reflogs(標簽的上一個目標或之前的結帳)來引用它,具體取決於: git tag wip @{1}來標記您之前的標簽worktree commit和git tag wip master@{1}標記以前的master提交。 git revisions顯示了你可以引用提交的所有方法,從你可能猜到的人數來看,人們最終不會打擾臨時名稱而只是直接參考機上工作所使用的提交,這是完全正確的。

暫無
暫無

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

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