2017-04-18 41 views
1

我有一個關於GIT最佳實踐的問題。想象一下,我創建了一個名爲hotfixes的分支,併爲其添加了一些修復,然後將分支與主分支合併。然後我創建一些其他分支並將它們與主人合併。如何在移動到GIT中的舊分支時使用當前的工作副本?

幾周後,我意識到我需要添加一些熱修復,所以我本地進入hotfixes分支。然而,由於主分支在過去的幾個星期裏進行了,我轉向了一個較老的分支機構,所以我現在最終得到了一個更老的本地工作副本。

如何確保能夠在幾周前創建的分支中工作,並且仍然具有當前工作目錄,因爲它在主服務器中?這是使用rebase命令完成的,還是必須刪除舊的分支並重新創建它?

回答

1

的問題是,我想總是使用相同的分支或至少 同名「修復」

但是,爲什麼?我建議創建一個與修復直接相關的分支,即hotfix/missing_dll,將其從當前工作分支(例如master)分支出來,並在合併後將其刪除。這可以確保您始終保持您當前工作的最新狀態。

如果你真的一個分支連續使用,你可以合併你的每一個你又開始做這個工作時的電流masterhotfixes。但是,這會產生醜陋的合併提交,最終會在您的master分支中結束。

第一個應用程序更乾淨,更容易出錯。如果你有充分的理由繼續使用一個hotfixes分支,請詳細說明。

編輯:除了其他工作流程,這是在this分支模型中所做的。

+0

太好了,謝謝你的解釋和鏈接!僅僅爲了我的理解,在'hotfix/missing_dll'中是否有斜線的原因,還是僅僅是分支的名字? – phpheini

+0

是的,有一個原因。 Git將您的本地分支存儲在'.git/refs/heads'文件夾中。如果您將分支命名爲不帶斜線,例如'mybranch',在該文件夾中創建一個名爲'mybranch'的文件,其中包含您的分支當前指向的提交的SHA標識。如果創建一個名爲'hotfix/myFix'的分支,將在'.git/refs/heads'中創建一個*文件夾*,並在該文件夾中創建一個名爲'myFix'的文件:'.git/refs/heads/hotfix/myFix'。如果你有很多分支機構,這可以使分支管理更容易。一些git GUI也使用它來改善許多分支的處理,例如, GitKraken。 – kowsky

+0

太棒了,不知道,謝謝! – phpheini

0

我不知道特定約定是什麼,但如果主版本發生重大更改,我傾向於合併並再次分支。這基本上允許我更新分支版本。我傾向於這樣做,因爲如果主版本接受更新,通常意味着它們正在更新。 另一件可能的事情是製作你已經改變的東西的副本,並在你從更新後的主版本創建分支時修改這些文件。

希望這有助於,也很好奇看看別人的建議。 祝您有美好的一天!

+0

謝謝您的回答!問題是我想總是使用同一個分支或至少是同名的「hotfixes」(創建新分支時這是不可能的)。 – phpheini

+0

是的,我看到你的困境,這是一個很好的問題,我不知道它是否可能。因爲當你分支的想法是它不受其他分支/版本的變化影響。所以你可以繼續編輯你的舊分支,但是如果主版本的變化太多(在錯誤的地方),那麼如果沒有一些複雜的版本控制問題,你可能無法合併它們。 –

1

不管你做什麼,在任何合理的工作流程中重新使用舊的修補程序分支(通過合併或重新綁定)是根本錯誤的。修補程序分支就像一個功能分支 - 您也不會重複使用這些分支。

完成修補程序並將其合併回主分支後,可以直接刪除修補程序分支。當你創建它時(從master),稍後,一切都會好的。

順便說一句,在git中刪除合併分支根本不會改變歷史記錄。 git中的分支只是指向提交的「便籤」。例如,gitkgit log --graph --decorate master仍將無限期顯示實際的分支提交。實際上完全不可能刪除在git checkout -bgit merge之間進行的提交

本手冊詳細說明了這一點:https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell

+0

謝謝!但是,當我簡單地刪除它時,我也會放棄該分支的所有歷史,並且看不到我幾周前在該分支中做過的事情,對不對? – phpheini

+0

在答案中看到我的編輯,@phpheini。 – AnoE

+0

我建議閱讀[this](https://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell),或者甚至是關於分支的整章,以瞭解分支在git中工作。 – kowsky

相關問題