2013-08-02 36 views
8

在SourceTree上,我有一個名爲「develop」的分支。我使用SourceTree Git Flow從「開發」分支創建新功能。我對功能分支進行了更改,然後完成功能並將更改返回到我的「開發」分支。一個分支的多個功能 - 有什麼意義?

然後我將這些更改推送到遠程。

現在,這就是我想要做的。我必須同時處理兩個JIRA任務。所以我從「開發」分支創建了兩個功能分支:「develop/feature1」和「develop/feature2」。在SourceTree上選擇時,我可以通過雙擊來切換這些功能。然後我可以檢查兩個功能分支的工作副本,但我注意到我添加到其中的文件也被添加到另一個。

我的問題是:

  1. 當我將文件添加到一個要素的工作拷貝,他們爲何要出現在另一個功能的工作副本?

  2. 如果功能分支不能隔離彼此的變化,那麼它有什麼意義?

+3

不熟悉** ** altassian但就** **的git而言,任何新創建未跟蹤的文件不屬於git,直到你「添加」它們。因此,無論您將任何分支簽入您的工作目錄,您都會看到它們。你的情況也是如此嗎? – TheCodeArtist

+0

@ TheCodeArtist好的提示。我如何檢查 - 使用命令行 - 這些文件是否已被添加或不是?或者,如果文件更新已被添加或沒有?謝謝。 –

+4

'git status'應該在單獨的'untracked'部分顯示文件列表 – TheCodeArtist

回答

9

git允許您切換分支,即使您在當前分支中有未提交的更改。文件保持未提交狀態,如果需要,您可以在其他分支中提交它們。當你意識到你已經完成的feature/feature1時,這很好。

一旦您提交了更改,它們就不再在分支之間切換。然後,您可以合併或櫻桃挑選分支之間的變化。

請注意,git將不允許您切換分支,如果您有未提交的更改導致要切換到的分支中出現合併衝突,並且可能即使您的某個更改位於已更改並已提交的文件中在您想要切換到的分支中。在這種情況下,您需要首先提交,恢復或存儲您的更改。

如果git不允許您切換分支,並嘗試通過在切換分支之前隱藏您的更改來解決該問題,則應確保將該分支隱藏在原始分支中。如果你在feature/feature1,存儲變化,然後切換到feature/feature2和藏匿流行那裏,你鬆散的變化,存在於feature/feature2而不是在feature/feature1。這很難被發現。

3

git不會跟蹤新文件和更改,直到您執行git add。這意味着git沒有這個數據的副本,所以如果它在你簽出一個不同的分支時恢復你的修改,那麼它將不能在之後恢復它們。

你可以看到其中的列表文件索引修改,並未跟蹤git status

解決這個問題的唯一途徑是通過,通過添加並承諾他們(你可以用git reset後撤銷)跟蹤與git的更改,或通過與git stash -u 積攢他們(可撤銷後來與git stash pop)。

git以這種方式工作的好處是,你可以在任何你想做的事情上工作,而不必考慮分支。當需要提交的時候,您可以簡單地簽出相關分支,並用git add添加您想要的文件,或者僅添加您想要的文件的部分git add -p


1:-u是簡寫--include-untracked,其中包括新創建的文件,但不能忽略的文件

相關問題