git merge
現在の作業中のブランチとマスターの2つのブランチ間をシミュレートする方法はありますか?
を作成しなければならないとき、私はしばしば衝突を起こしgit merge
ます。最初にマージをシミュレートする方法はありますか?
git merge
現在の作業中のブランチとマスターの2つのブランチ間をシミュレートする方法はありますか?
を作成しなければならないとき、私はしばしば衝突を起こしgit merge
ます。最初にマージをシミュレートする方法はありますか?
回答:
マージを試すまで、何が起こるかをシミュレートする方法はないと思います。ただし、git status
マージを実行する前にの出力が空であることを確認した場合、先に進んで試してみるのは非常に安全です。競合が発生した場合は、すぐに以前の状態に戻すことができます。
git reset --merge
git 1.7.4以降、次のようにしてマージを中止することもできます:
git merge --abort
(そのオプションを追加したコミットメッセージで説明されているように、これはとの一貫性git rebase --abort
などのために追加されました。)
--no-commit
私の意見では、使用する方がはるかに簡単です
--no-commit
、インデックスと作業ツリーはまだ変更していませんが、「変更を加えずに」ではありません。質問、それは一般的に、マージがどのように行われるかを確認する最善の方法がマージを試すことであることに気付いていないためです。多くの場合、以前の状態に戻ることがどれほど簡単かを知らないためです問題があることが判明した場合。
git merge --abort
するgit reset --merge
ときMERGE_HEAD
と同等」と記載されているので、覚えやすいものは何でもあります:)
を使用git merge --no-commit
して、マージが実際にコミットされるのを防ぐことができます。マージがうまく機能しない場合は、元のヘッドにリセットしてください。
たとえそれが早送りであっても(したがって、定義上、競合がないため)マージを最終的に実行したくない場合は、追加することもでき--no-ff
ます。
git merge --abort
が存在するとは思わない-たぶんあなたは意味git reset --merge
ですか
rebase
て--abort
for がないことを忘れてしまいましたgit merge
。
--no-ff
も投げます。ffマージが発生しないようにするため。
--no-ff
は、--no-commit
早送りの変更を停止しないため、ここではほとんど必須です。
トピックブランチの変更をマスターと比較したい場合は、次の方法が最も簡単で安全です。
git checkout master
git checkout -b trial_merge
git merge topic_branch
マージが完了すると、マスターからの統合された変更を簡単に確認できます
git diff master
完了したら、単にtrial_mergeブランチを削除します
git checkout master
git branch -D trial_merge
このように、マスターブランチは決して変更されません。
git checkout --detach
を何でも実行してテストできます。後で、変更を保持する場合は、を実行しますgit checkout -b new_branch
。また、変更を破棄したい場合は、必要なブランチをチェックアウトします(git checkout master
)。
topic_branch
が巨大な場合(最初にこの質問をしているdiff master
場合のように)、マージが競合を引き起こす場合、出力はおそらく大きすぎて目を見張ることはできません。
それがあなたのケースであるかどうかは正確にはわかりませんが、あなたの質問では、機能を開始したり、数日かけてコミットしたり、その開発を何度もマージしたりすることがあります。
この時点で、変更した正確なファイルを制御できなくなり、機能が閉じてコードが開発されたときにのみ、それを知ることができます。
この場合、ソースツリーを使用することで(マージ以外の変更ではなく)行った変更を知ることができます。
ベースブランチを右ボタンでクリックして選択する必要がありますDiff Against Current
:
その後、ブランチをベースブランチにマージした場合にマージされるすべての変更がソースツリーに表示されます。
もちろん、競合は表示されませんが、マージでは便利なツールです。