[英]GIT: How to overwrite QA branch with Master, preserving QA branch history?
我的目標是在某個時候將MASTER(比如6.4.3)提升為QA(所有內容都進入QA分支),並且在此過程中,我在項目版本中添加一個四位數並進行構建。 因此,質量檢查工作進展順利,產生了6.4.3.1。
這樣,我可以在QA分支上執行修補程序,並將其集成回QA(並在需要時與主服務器集成)。 這將在QA分支上生成一個新的修訂版,並且可以說6.4.3.2。
但是,隨着時間的流逝,已經對master進行了添加,現在master是6.4.9。
因此,我需要將其再次升級為質量檢查人員,並且必須生成6.4.9.1軟件包。 但是所有QA更改都需要由主數據覆蓋,而不是合並。 所有這些更改僅與6.4.3.x相關
我所做的所有嘗試都導致對pom.xml的合並操作。 我嘗試過合並和改組,也嘗試了像我們這樣的戰略,但沒有運氣。
我真正需要的是一個不繁瑣的方法,轉到master分支,將-R所有內容復制到/ tmp文件夾,然后切換回QA分支,將cp -R從/ tmp文件夾復制到它,然后執行git add。 然后,新文件自然會覆蓋舊文件。
這樣,我將擁有所有新的變更,而不再需要主人重寫舊的質量檢查變更,而不再需要,但仍然希望將其保存在歷史記錄中。
特克斯·馬可
加入2014-08-27:
master上的pom.xml:
<version>1.2.4</version>
<dependency>[6.0.0,)</dependency>
在qa上的pom.xml:
<version>1.2.3.1</version>
<dependency>6.0.3</dependency>
完成此過程后,我需要進行質量檢查:
<version>1.2.4.1</version>
<dependency>6.0.5</dependency>
生成1.2.4.1的腳本正在運行,並且mvn版本:resolve-ranges也正在運行。 這就是為什么我不能使用質量檢查中已更改的文件的原因。 它們需要替換為當前的主更改,因此我可以對其進行必要的更改。
不要這樣 使用合並,請參閱: http : //nvie.com/posts/a-successful-git-branching-model/ 。 如果您想更改質量檢查,但又不想將其放回原版,則可以合並然后還原它。 使歷史更加清晰。
但是,如果您真的希望,請使用git merge -s ours master
進入qa分支。
git checkout master
git merge -s ours origin/qa #discards all qa changes †
vi pom.xml #(I manually edited to make it 1.2.4.1)
git add .
git commit . -m "1.2.4.1"
# make sure it works, passes all tests, etc and ready to go for QA.
git push origin master:qa #yes, you don't even need to flip branches locally
vi pom.xml #(new release, 1.2.5)
git add .
git commit . -m "1.2.5"
# continue master development.
†實際上,您不應該放棄質量檢查更改,因為它可能是質量檢查人員測試並接受的修補程序/錯誤修復程序,並且當然應該合並回母版,否則,下一個質量檢查人員中會出現相同的錯誤,不是很好。 所以通常您不應該使用-s ours
。
完全相同,但難度更大,歷史記錄圖看起來更糟,但是看起來像“您的方式”:
git checkout master
git merge -s ours qa #discards all qa changes
git checkout qa
git merge master # it does fast-forward in fact
vi pom.xml #(I manually edited to make it 1.2.4.1)
git add .
git commit . -m "1.2.4.1" # committing into `qa` branch
# make sure it works, passes all tests, etc and ready to go for QA.
git checkout master
vi pom.xml #(new release, 1.2.5)
git add .
git commit . -m "1.2.5" # committing into `master`
# continue master development.
首先,檢出質量檢查分支。 然后,運行git read-tree -um
commit
。 這將有效地將您的工作樹“重置”到給定的提交,而無需移動任何分支指針或檢出任何提交。 之后,您可以運行git commit
來將這些更改git commit
到QA分支。
更多信息: git-read-tree(1)手冊頁
這是我得到的最終解決方案,將提出的兩個解決方案合並在一起,完全滿足了我的需求。 Tks很多。
最終git lola:
* 782db24 (HEAD, master) 1.2.5
| * d2572c8 (qa) 1.2.4.1
| * 12d4348 Merge branch 'master' into qa
| |\
| |/
|/|
* | 1884a7c release 1.2.4
命令:
git checkout qa
git merge -s ours master #(will store this on history, w/o conflicts)
git read-tree -um master #(will replace current merged files with master)
vi pom.xml #(I manually edited to make it 1.2.4.1)
git add .
git commit . -m "1.2.4.1"
git checkout master
vi pom.xml #(new release, 1.2.5)
git add .
git commit . -m "1.2.5"
謝謝你們兩個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.