7

ときどき、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

この時点で、master ブランチの foo.txt に加えた変更が削除されていることがわかります。

私は他にも多くの変更を加えており、これらすべての途中で他の git 操作を実行しています。このようなマージは git の全体的なポイントであるため、ある時点でおそらく何か間違ったことをしているように感じます。

誰にも何のアイデアがありますか?

4

1 に答える 1

1

test ブランチのコミットは最後に行われ、test には共通の祖先コミットを解決できるコミットがあるため、デフォルトの動作は test からの新しい情報を最新の情報として使用することです。-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
于 2011-01-21T16:59:15.433 に答える