2013-06-27 41 views
2

我是新來的混帳,並從clearcase,我不明白爲什麼會發生以下情況:如何阻止git在分支之間移動我的更改?

說我創建一個git私人開發分支,並對其中的文件做一些更改。

現在,我需要做一些其他無關的工作,並簽出master分支。

Git自動將我的更改從我的私人分支傳遞給我的本地主人。

我覺得這非常直觀。我有私人開發分支的原因是因爲我不想讓我的更改去其他地方,直到我準備好了。爲什麼git在沒有我這麼說的情況下移動它們。

是的,有git存儲,但是一旦你有一些開發人員並行或者你需要經常切換,它是一件難事,以跟蹤存儲。我寧願這些改變也不會在分支機構簽出。如果你忘記藏在瘋狂的時刻,恐怖就會與你交朋友。

我是否缺少一些可以避免這種情況的配置?

非常感謝!

+0

您是否對私人分支進行了更改? –

回答

3

最簡單的做法是在檢查出主人之前將您的更改提交到private_dev分支。

我寧願不改變分支簽出。

甚至有兩個回購:

  • 一個你從來沒有推(以及您可以在private_dev分支提交)
  • 在其中你只是拉動master分支(從第一個本地私人回購),然後推送到任何你想要的遠程。

這樣,你永遠不會誤解你的private_dev分支。

+0

@ VonC我還沒有推動這些變化。當我結賬到主人時,未推送的更改會移動。明確地說,在一個視圖中我的文件永遠不會被移動到另一個視圖,除非明確地這樣做。這不就是git中的行爲嗎? – zaphod

+0

@zaphod如果您在'private_dev'中提交了更改,*則*表示在簽出'master'時更改不會移動。但是,如果您不承諾並且不存儲......它們是您工作樹的一部分,「master」不會觸及它們,這意味着您仍然可以在「結帳大師」之後看到這些內容。 – VonC

+0

所以,你的意思是工作樹不是特定於分支的。它在分支機構中很常見?所以除非我承諾,這些改變將會被傳播。這不是我的git配置中的錯誤。 – zaphod

1

這是我喜歡做的事:

git config --global alias.temp '!git add -A && git commit -m "Temp"' 
git config --global alias.pop 'reset HEAD~' 

現在,當你要離開的一個分支現有的工作,並切換到另一個:

git temp 
git checkout other_branch 

當你想切換回和:

git checkout original_branch 
git pop 
1

我的猜測是你不會將更改提交給你的私人分支,所以git認爲它們是未分割的更改工作目錄。當你檢出另一個分支時,比如master和未跟蹤的更改不會導致任何衝突,git不會做任何修改它們的操作。這是一件好事,否則你可能會覆蓋你一直在做的工作。

爲了避免這種情況,請務必在執行git checkout以更改分支之前運行git addgit commit。或者,您可以使用git stash將您的更改存儲爲臨時提交。當您使用結帳返回​​您的私人支行時,請運行git stash apply以檢索您以前的更改或git stash pop以檢索它們並將其從存儲堆棧中移除。

相關問題