2011-01-21 84 views
0

每隔一段時間,我都會在git中遇到一些奇怪的行爲。當我在另一個分支中合併了一個分支中對一個分支中的文件所做的更改時,這個分支中的另一個分支與同一個文件發生了無關的更改。爲什麼git合併有時會在不應該刪除更改時刪除?

比方說,我從分支大師開始。這裏是發生了什麼粗線條:

vim foo.txt 
git add foo.txt 
git commit 

git checkout -b test 
vim foo.txt 
git commit -a -m added a new line to foo.txt 

git checkout master 
vim foo.txt 
git commit -a -m made some unrelated change 

git merge test 

在這一點上,我會發現我在主分支foo.txt的所做的更改已被刪除。

我做了很多其他更改,並在所有這些中執行其他git操作。因爲像這樣的合併是git的全部要點,所以我覺得我可能在某種程度上做了錯誤的事情。

有沒有人有任何想法是什麼?

+0

EDITED你能更具體,究竟哪裏的變化?有沒有衝突?合併文件是什麼樣的? – 2011-01-21 16:56:23

+1

我認爲您需要更清楚地瞭解您正在執行的其他操作「在所有這些中」。我一直在使用Git好幾年了,沒有看到它在沒有我指示的情況下去除了更改。 – 2011-01-21 16:57:39

回答

0

因爲測試分支上的提交是最後一次,並且測試具有可以解析公共祖先提交的提交,所以默認行爲是使用來自測試的新信息作爲最新信息。您可以通過使用-s選項來強制執行該行爲。請參閱此鏈接的例子:http://www.kernel.org/pub/software/scm/git/docs/git-merge.html

工作流實例

mkdir showoff_git 
cd showoff_git 
git init 
touch file_a 
echo "line 1" >> file_a 
git add . 
git commit -m "initial commit" 
git checkout -b test 
sed -i='' s/1/2/ file_a 
git add . 
git commit -m "bluffing" 
git checkout master 
git merge -s ours test 
相關問題