2013-02-06 123 views
3

我有兩個分支,「私人」和「公共」。我在私人和定期工作,我想要替換「公共」分支中的所有內容,以便在「私人」中擁有乾淨的文件副本。Git合併:取自「他們」的分支

由於我不希望「私人」的歷史轉到「公開」,我使用git merge --squash,但我仍然手動地逐個解決合併文件。有一個更好的方法嗎?

+0

可能的重複(或者,可能的答案):http://stackoverflow.com/questions/1922336/how-to-merge-a-branch-into-another-with-override-option-in-git –

+0

似乎有類似的問題,但答案是錯誤的。 「我們的」實際上是相反的,放棄私人和公開。我想要的是--strategy =「他們的」,但這不是合法的選擇。 –

+0

[git merge -s我們的可能重複,那麼他們的「]」(http:// stackoverflow。COM /問題/ 173919 /混帳合併-S-我們 - 什麼 - 關於 - 他們) – 2014-04-12 02:40:29

回答

1

如果在提交的兩個文件中相同的行已更改,壓縮合並不會改變存在衝突的事實。

完全拋棄一切一個「公共」分支和接管的「公共」的確切狀態,您可以執行下列操作之一:

  1. 使用ours合併策略(而不是策略選項)在其他幾個提交指出:
    1.A假設你是在分支 「私有」(否則,做git checkout private
    1.B git merge -s ours public
    1.C git checkout public
    1.D git merge --ff-only private
    1.e (可選:兩個分支現在都指向合併提交;如果你想「私人」指向合併之前提交,做:)git checkout private; git reset --hard [email protected]{1}(注意,這裏使用了引用日誌,只會像這樣的工作,如果你還沒有在此期間改變了「私人」)

  2. 檢查手動輸出「他們的」一面:
    2.a假設您在分支「public」(否則爲git checkout public
    2.b git merge --no-commit private將準備合併提交,但在提交之前停止,無論合併是否存在合併是否衝突
    2.c git checkout -f private -- .查看「私密」的當前狀態
    2.d git add .將衝突標記爲已解決(如有)
    2.e git commit保存合併提交; 「公共」現在有完全相同的內容爲「私有」

編輯:需要注意的是這個的How do I 'overwrite', rather than 'merge', a branch on another branch in Git?

編輯2倒的情況:如果要隱藏你的單公衆提交,您可以在這裏使用--squash開關太多,當然(步驟1.B 2.B和分別)

5

我覺得

git merge -X theirs private 

是你在找什麼。當然,你可以隨意追加--squash