簡體   English   中英

Git 嘗試合並時說沒有變化

[英]Git saying no changes when trying to merge

主分支提交:
git 日志 output
removedc1Changes(最新提交)
c2
c1

現在我使用 c1 commit hash 創建了一個名為 staging from master 的新分支: git checkout c1

暫存分支提交:
git 日志 output
c1

現在,如果我嘗試將 staging 分支合並到 master,它說沒有變化..

我知道這一定是因為兩個分支中都存在相同的提交,但在主分支中,它已被還原..

“事物就是事物本身,而不是其他事物。” Git 就是 Git,而不是你想象的 Git 或希望 Git 的樣子。 要使用 Git,您需要知道 Git 是什么。 合並,在 Git 中,是一個新的提交,它在兩個分支中執行自分歧點以來的所有更改。

您的分支機構之間的分歧點是c1 從那時起,一個分支添加了c2並刪除了removedc1Changes 另一個分支添加了......什么都沒有。

正如 Git 告訴您的那樣,自分歧點以來,您的staging分支沒有任何更改(因為您沒有在staging分支上進行任何新提交)。 因此沒有什么可以合並的。

c1以來唯一的變化是c2removedc1Changes on master ,它們已經master上。 所以合並沒有什么可做的。 自分歧點以來,兩個分支所做的更改已經存在於master上。 執行合並的唯一方法是為 Git 創建一個實際上為空的新提交,即它與removedc1Changes相同。

(這是另一種看待它的方式。正如您所說,這兩個分支確實都包含c1 。但是從那以后, master撤消了c1 ,並且staging沒有做任何與此相矛盾的事情。)

因此,您的偽合並不是撤消您之前所做的還原的可行策略。 撤消還原的方法是還原它,或者硬重置到還原之前的狀態以將其擦除。

你有什么是這樣的:

                        master
                           v
*---*---*---*---c1---c2---c1r
                ^
             staging

如果你想將staging合並到master中,git告訴你無事可做是正確的。

一切都在進行中,這個:

*---*---*---*---c1
                ^
             staging

已經在 master 上了,在這里:

+---- here ------+       master
|                |         v
*---*---*---*---c1---c2---c1r

您需要做的是恢復 c1 的刪除,此命令:

git revert c1r

(c1r = hash 您稱為“removedc1Changes”的提交)

這會給你這個:

                              master
                                 v
*---*---*---*---c1---c2---c1r---c1rr
                ^
             staging

在這種情況下,您將再次看到 c1 引入的更改。

您不需要暫存分支。

另一種方法是將 master 重置為刪除 c1 之前的狀態,如下所示:

git reset --hard c2

這會給你這個:

                   master
                     v
*---*---*---*---c1---c2
                ^
             staging

如果您的場景是 100% 准確的,master 提示處的提交是從 c1 中刪除更改,我會進行重置。 如果您在它之后有其他提交,我會改為執行還原。


git 合並不執行任何操作的原因是 git 不嘗試合並 state,它合並更改。 由於沒有對 staging 進行任何更改,而 staging 還沒有在 master 上進行,因此沒有要合並的更改,因此無需執行任何操作。

從討論來看,您想要重新應用 C1 提交更改。 我認為您可以使用 C1 提交的git cherry-pick ,這將復制原始提交,本質上是重新應用它。

git cherry-pick <C1 commit sha>

在合並到主分支(或創建 PR)之前,您可以在暫存分支上執行此操作。

請注意,這將保持歷史記錄不變,只是在頂部添加一個新的提交。

暫無
暫無

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

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