0

git-svn リポジトリがあり、ブランチをマスターにマージしたいと考えていました。そのために、ブランチから始めて、次の手順を実行しました。

git commit -m "my commit message"    # commit the changes on the branch
git checkout master                  # change to the branch I want to changes to be merged in
git svn rebase                       # update the repository
git merge --no-ff -m "my commit message" # merge the branch onto master

しかし、この段階で次のエラーが発生しました。

Auto-merging <file>
CONFLICT (content): Merge conflict in home/httpd/html/data/php/includes/Processes.inc.php
Automatic merge failed; fix conflicts and then commit the result.

次に、問題のある1つのファイルの競合を修正し(他のいくつかのファイルは正常にマージされました)、最後のコマンドを繰り返しました。

git merge --no-ff -m "my commit message" # merge the branch onto master

しかし、次のエラーが発生しました:

fatal: You have not concluded your merge (MERGE_HEAD exists).
Please, commit your changes before you can merge.

わかりましたので、エラーメッセージが示すようにコミットを行いました。

git commit -m "my commit message"

その後、調べてみるgit logと、指定されたコミット メッセージが出力に 2 回表示されていました。

最後のコミットには変更が含まれていませんが、すべての変更 (競合のあるファイルを含む) は最後から 2 番目のコミットの一部です。

3 つの質問があります。

  1. 同一のコミットメッセージで2つの同一のコミットを作成するために、上記で正確に何が起こったのですか?
  2. それを安全に修正する「簡単な」方法はありますか?(git reset HEAD~1最後の空のコミットを取り除くために a を実行できますか?)
  3. マージ後に競合が発生した場合の「標準的な」手順/コマンドのリストは何ですか? git mergeその後、git commitまたは何か他のことを行う必要がありますか?

不明な点がある場合は、コメントを提供してください。質問を更新してより明確にすることができます。

4

1 に答える 1

1

あなたは正しいことをしたようですね。おそらく、あなたのgit log出力には、ブランチでのコミットとマスターでのマージ コミットの両方が表示されています。git log --graph --oneline --decorate各コミットがどのブランチにあるかを確認できるようにするために、 which を使用してみてください。

マージ コミットをブランチ コミットと比較すると、マージを解決するために行った変更のみが表示されるか、マージ コミットがブランチ コミットと同一である場合は何も表示されません。ただし、マージ コミットを比較すると、マージgit-svnされた完全な変更が表示されるはずです。

この場合、修正する必要はありません。古いブランチとそのコミットを削除するgit log必要はありませんが、オプションを使用していない場合は紛らわしく見え--graphます。

于 2013-05-30T22:09:19.987 に答える