簡體   English   中英

GIT:如何用Master覆蓋質量檢查分支,同時保留質量檢查分支的歷史記錄?

[英]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.

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