簡體   English   中英

如何使用 git 從另一個分支獲取新更改

[英]How to get the new changes from another branch with git

一周前我將分支B合並到我的分支C並在我的分支 C 上進行了一些更新。

同時,我的同事對他的分支B做了一些更新。

我想在我的分支C上獲得他的更新。

我真的很困惑,因為他告訴我只是重新建立在他的分支上-但這會不斷刪除我所有的新更新/添加的文件。

我試圖再次合並這兩個分支 - 但不知何故我這次沒有得到他的更新

我們的項目看起來像這樣:

Origin---o---o---o---o---o---      main
 \
  o---o---o---o---o---o---o---o---o B
   \               \(merged)       \(rebase here?)
    o---o---o---o---o---o---o---o---o C

變基很復雜,在這種情況下可能是個壞主意。 讓我們采用您的拓撲:

o---o---o---o---C1---o---o---o---o friend
 \               \
  o---o---o---o---M---o---o---o me

要獲取您朋友的更改,正確且最簡單的做法是(在me ):

git merge friend

那會給這個:

o---o---o---o---C1---o---o---o---o friend
 \               \                \
  o---o---o---o---M---o---o---o---M2 me

盡管您的朋友說了什么,但此時您無法連貫地重新設置基准,因為me已經包含了來自friend的合並提交(M)。 變基不能輕易解決這個問題; 它將忽略合並提交,因此合並的效果將在您的分支中撤消。 有一些方法可以解決這個問題,但在這里不值得討論。

然而,現在的關鍵問題是,如何擺脫由於糟糕的 rebase 和糟糕的合並而讓自己陷入的混亂局面。 答案是使用reflog ,這使得您在 Git 中所做的大部分工作都無法撤消。 當您說git reflog時,您將看到 HEAD 的所有先前狀態的列表。 其中之一將是 state就在您開始 rebase 之前 您想通過說git reset --hard <SHA>將 go 回到那個狀態(正如我在這里解釋的那樣)。 現在做你應該做的合並,然后繼續。

暫無
暫無

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

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