作爲構建過程的一部分,我需要基本上使一個分支完全像另一個分支。它需要是一個真正的分支(標記不是一個選項)。完成分支的合併/複製/推送
兩個分支都已經存在。目標分支將永遠不會被除此過程之外的任何其他事物所觸及。
這是我有:
git checkout Destination
git merge Source
git push
這是否看起來像一個好辦法?有一種更簡單的方法嗎?
編輯
爲了澄清,最終目標是採取源的快照並將它推到遠程用作目標。每次運行特定的構建時,我們都會這樣做。
作爲構建過程的一部分,我需要基本上使一個分支完全像另一個分支。它需要是一個真正的分支(標記不是一個選項)。完成分支的合併/複製/推送
兩個分支都已經存在。目標分支將永遠不會被除此過程之外的任何其他事物所觸及。
這是我有:
git checkout Destination
git merge Source
git push
這是否看起來像一個好辦法?有一種更簡單的方法嗎?
編輯
爲了澄清,最終目標是採取源的快照並將它推到遠程用作目標。每次運行特定的構建時,我們都會這樣做。
所以,如果你需要確切的狀態,你爲什麼不使用目標系統上的源代碼分支?
我們使用主生產分公司和dev分支爲測試系統。在日常工作中,我們使用功能分支。所以你從主分支分支工作,併合並功能分支maste和dev分支。
在這種情況下,您絕不應將dev合併到主分支分支中。有了這個szenatio,你可以將你的特性分支放在開發者頭上並測試這個特性。之後,您將主文件中的功能分支合併並投入使用。
這是一個很好的合併策略教程。
https://www.atlassian.com/git/tutorial/git-branches#!merge
如果你真的需要更好的確切狀態了,如果你做一個硬復位到源分支。那麼你可以肯定它的確如此。
我們基本上需要一個Source分支的snapshop或一個檢查點。與標籤類似,但我們不想使用標籤(出於很好的理由)。 –
我應該澄清一下 - 我們也想把這個快照/檢查點推送到遠程。 –
問題是如果你需要一個更好的快照來創建一個新的分支作爲快照,否則你會覆蓋舊的狀態。所以也許它是一個解決方案來創建一個帶有像'snap_tagname'這樣的前綴的新分支。然後你可以寫一個腳本來管理這些快照並清理舊的分支。 – Stony
我需要基本上使一個分支看起來完全一樣。
git branch -f one_branch another
現在one_branch
長相酷似another
。如果您還想在本地檢出one_branch
,請用checkout -B
替換branch -f
。
有趣。按照分支-f與GIT推?這種方法的任何缺點與我在我的問題中有什麼不同? –
對於第一個,第二個,對於第二個,您的方法不會使兩個分支完全相同,除非one_branch已經是另一個分支的祖先 - 在這種情況下,分支-f/checkout -B在沒有嚴格規定的情況下獲得完全相同的結果。 – jthill
如果你想創建的my_branch
尖端恰好具有相同內容的other_branch
尖端一個新的提交,這裏是應該做的一個方法:
$ git checkout my_branch # make sure we are on the branch we want to add to
$ git rm -rf . # remove everything belonging to current tip
$ git archive other_branch | tar xf - # replace with the contents of other_branch tip
$ git add -A . # stage all the modifications
$ git commit -m "updated to other_branch" # commit the changes
如果您使用的是Windows和沒有tar
可用,git archive
步驟可能需要看起來更像git archive --format=zip other_branch | unzip ...
- 我不經常使用Windows'unzip
來記住適當的選項,並且您可能有不同的解壓縮程序,如winzip
或其他東西,所以確切命令可能需要一些調整。但基本的過程應該保持不變...
您的方法與git merge
是有效的,但可能不會產生完全你想要的結果,因爲它創建一個新的提交,其中包含兩個分支合併在一起的變化(因此這個名字......),所以它不是一個真正的快照。上面的代碼獲取了other_branch
的當前技巧的快照,並在my_branch
的頂部添加了一個新的提交,例如,如果您正在構建僅包含發佈快照的側邊分支或其他特定的里程碑類型提交沒有所有的中間提交。
你也許可以通過git merge -s ours --squash
或其他東西來實現這一點,然後移動分支指針,但我傾向於認爲上述至少在概念上更容易遵循。
通過「看上去完全一樣」,你的意思是說,當你簽出分支的兩個主管之一時,工作目錄的內容應該是完全相同的,或者除此之外,同樣的需求對於在分支上每次連續提交回分支的起源?我傾向於認爲第一種情況是分支頭相同,而第二種情況是整個分支相同。他們是兩個完全不同的東西...... – twalberg
如果我正確地理解你,那是前者 - 分支負責人。基本上我想在一個時間點「複製」Dev => QA以進行構建。根據我在SVN上的經驗,我問了這個問題:http://stackoverflow.com/questions/20615529/does-git-support-copy-to-a-tag。但是,標籤也不是其他原因的選項。 –