3

gitでの私のルーチンは常に非常に単純です:

git add -A
git commit -m 'the changes I made'
git pull
# resolve conflicts
git push

ただし、いくつかの不明な理由により、オリジンとの多くの競合にもかかわらず、プルした後、競合は発生せず、許可なくローカルコピーを強制的に更新します。これらの線に沿った何か:「2つのファイルが変更され、2つの挿入(+)、6つの削除(-)」。しかし、私の場合、競合は単純なマージから解決するべきではなく、私の側から手動で競合を解決する必要があります。gitが手動の競合解決を許可しないのはなぜですか?前もって感謝します!注:私のgitコマンドにはいずれもforceオプション-fがありません

4

2 に答える 2

5

git pull引数なしは、多かれ少なかれ、 と同等git fetch && git merge origin/<upstream_branch>です。とpullの代わりにを使用することで、git がローカル ブランチへのマージを試行できるようになります。そのマージが競合なしで行われる場合、ローカルは「強制的に更新された」ように見えます。これは、ユーザーの介入なしに、リモートのファイルのバージョンと自分のファイルの違いを整理できたためです。fetchmerge

コードを見ずに何が起こっているのかをデバッグするのはちょっと難しいですが、これを試してください:

git fetch ;# fetch the remote changes
git diff HEAD origin/<branch> ;# diff your local branch with the remote's copy of <branch>

からの出力は、git diff何が起こっているかの手がかりになるはずです。さらに詳しく知りたい場合は、 を試してgit merge --no-commit origin/<branch>から を発行してくださいgit diff --cached。これにより、git が自動的にマージした変更が正確に表示され、何が何であるかを判断できるようになります。

于 2012-07-06T20:06:42.407 に答える
0

git実行中にすべての競合を解決できた場合git pull、コミットが行われます。これは、必ずしも物事が正しくなったという意味ではありません。お気づきのように、変更によっては、手動で修正する必要がある場合があります。

これを行うには、プル後に作業ツリーで修正を行い、(たとえば を使用してgit add -u) ステージングし、マージ コミットを で修正しgit commit --amendます。

これにより、gitが作成したものを修正を含むものに置き換える新しいマージコミットが作成されます。

その後、通常どおり結果をプッシュできます。

于 2012-07-06T22:32:36.663 に答える