簡體   English   中英

git merge覆蓋更改

[英]git merge overwrites changes

任何人都可以幫助避免git merge問題。 我正在嘗試合並我的分支,讓我說my_branch到另一個分支,讓我說another_branch。 由於another_branch是基礎分支。因此要添加在my_branch中完成的工作,首先我要合並my_branch。 為此,我正在執行這些步驟。

git checkout another_branch
git pull anothr_branch

一旦更新了another_branch中的最新更改,便切換到my_branch

git checkout my_branch
git merge anothr_branch

在完成所有這些操作之前,我要提交並進行更改以將其保存在本地。 因此,毫無疑問會丟失我的任何更改。

但是我看不到another_branch的所有更改,因此我稱它為覆蓋。

可能是什么原因?

這是我們在多開發人員,多團隊環境中一直使用的日常例程,該環境足夠簡單並且運行良好。

假設您有一個dev分支,用於存儲產品的當前開發中版本。 一個分支,用於存儲您當前的生產版本。 每個開發人員都有自己的分支來實現功能或修正錯誤。

每天早上,所有開發人員都會執行以下操作:
Checkout 開發人員
拉。
Checkout 開發人員的工作分支
重新開發

一整天,上述操作可能會重復。 開發人員向指定為dev分支維護者的其他開發人員發出合並請求。

開發商:
提交更改。

開發人員維護者:
從開發人員結帳分支以進行合並
拉。
Checout 開發人員
從開發人員的分支合並到合並

您可能想要做的是使用rebase 在提交分支到源分支之后,將基准重新提交放在目標分支中。

所以在本地,如果我在功能分支上,我將使用git rebase master這會將我在功能分支上的提交放置在master最新的提交之上。

對於遠程分支,我通常使用git pull --rebase ,它存儲您的更改,從服務器中提取更改,將您的更改放在服務器中的最新更改之上。

我遇到的關於重新調整工作原理的最佳視覺指南是Atlassian撰寫的這篇

您可以在以下資源中找到有關rebase更多信息:

在您將具有沖突的文件標記為已解決之前,Git不會覆蓋(即使實際上不是)。

Git不會嘗試聰明地進行合並。 合並時,如果可以干凈合並,則可以合並。 如果不能,它將暫停合並過程並標記您應手動解決的沖突。 解決文件沖突后,應使用命令git add <file>... (用於跟蹤文件的同一命令)將其標記為已解決。

Git這樣標記沖突:

<<<<<<< HEAD:index.html
< div id="footer" > contact : email.support@kozbara.com</div>
=======
<div id="footer" >
please contact us at support@kozbara.com</div>
>>>>>>> anotherBranch:index.html

上部(====之前的部分)位於index.html文件的HEAD處。 下部來自同一文件中名為anotherBranch的分支。

也許您想閱讀git教程中的這一部分

我解決了以下分支布局的問題:

featureA-development分支而來,所有文件都有很多更改。 很長一段時間都沒有工作。

開發 -當前版本,錯誤修復以及需要發布的其他新功能。 最近正在研究。

我希望Develop的所有新功能都可以在featureA上使用。 所以我做了:

  1. 合並到featureA中->覆蓋featureA中的所有內容
  2. 將featureA合並到development的副本中以測試其是否發生了更改->與上面相同
  3. 然后我嘗試變基

在featureA分支上:

git rebase develop

(這會將整個功能分支移至developer分支的頂部,並保留所有提交)->並非如此。 它用發展覆蓋了一切。

然后:在開發分支上:

git rebase featureA

(這將整個開發分支移到了featureA的頂部),並且有效! 但是,存在沖突是有道理的,因為在這兩個文件上都對文件進行了編輯,但這是我想要的,因為我現在可以選擇。

error: could not apply fa39187... something to add to patch A

因此,我將解決沖突(選擇我想要的更改...有時會從featureA中提取一些內容,並從同一文件中的development中提取內容),然后提交並推送,然后繼續進行基礎調整,直到使用下一次提交沖突

git rebase --continue

那會說不再有問題,我應該改用

git rebase --skip

我該怎么做,然后又發生另一個沖突,依此類推。 因此,基本上嘗試以其他方式重新設置基礎使我能夠看到所有代碼更改,並一步一步解決了我想做的沖突。

暫無
暫無

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

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