現在、同僚と私は両方ともmasterブランチで作業しています。作業ツリーに、コミットしたくないコードがあります(ステートメントのデバッグなど)。ここで、同じファイルの一部に変更をコミットした場合、それらをマージすることはできません。
$ git merge Origin/master
Updating 1b8c5c6..eb44c23
error: Entry 'blah.Java' not uptodate. Cannot merge.
Subversionのバックグラウンドから来て、リポジトリから変更をプルするときに作業ツリーを自動的にマージすることに慣れており、競合がある場合は手動で解決します。
私がこれをgitで行うことがわかった最も速い方法は次のとおりです:
$ git stash
$ git merge Origin/master
$ git stash pop
基本的に、コミットされていない変更を削除し、マージを行ってから、変更を再適用します。 mergeに、作業ツリーとプルしようとしている変更を自動的にマージするように指示するにはどうすればよいですか?
私が知る限り、あなたができる最善のことは、あなたがすでに持っているものですgit stash
。私もマージがきれいな木だけを扱いたいのは奇妙だと思います。
Subversionから学んだことはすべて忘れてください。
外部の変更を導入する前に必ずコミットしてください。
ほぼ完全に機能しているツリーがあると想像してください-完璧ではないかもしれませんが、ある程度進歩しています。次に、マージを実行し、持ち込んでいるコードが大混乱を引き起こしました(バグが多く、競合が多すぎて対処できないなど)。元に戻すことができたらいいですね。
コミットすればできます。そうしなければ、苦しむだけです。
覚えておいてください:コミットしたものはhaveをプッシュしたものになりませんが、コミットしなかったものは簡単に失う可能性があります。
安全で簡単なことをして、早くコミットし、頻繁にコミットするだけです。
git pull
は「正常に機能します」git stash save
git pull
git stash pop
git stash save
git pull
git stash pop
git reset
git stash drop
git pull
は「正常に機能します」git pull --rebase
履歴がすっきりしているため、「さらに効果が上がる」git pull
git add FILE
競合するファイルごとにgit commit
git pull --rebase
履歴が明確になったため、「さらにうまく機能する」可能性があります詳細な説明については、次を参照してください: https://happygitwithr.com/pull-tricky.html
git merge
ローカルリポジトリに関して変更されたファイルの変更をマージします。これにより、マージがうまくいかなかったときに変更が失われるのを防ぐことができます。
マージするCVSとSVNのアプローチでは、更新前にファイルを手動でコピーせず、マージ時にスクランブルをかけた場合、手動で再編集して良好な状態に戻す必要があります。
マージを行う前に変更をコミットするか、隠しておくと、すべてが元に戻ります。マージがうまくいかない場合は、いくつかの方法を試してみて、最も効果的な方法を使用できます。
実験的な変更またはデバッグの変更をコミットする場合は、git rebase
経由で取得したコミット後にそれらを移動するにはgit merge
それらを簡単に削除したり、誤ってリポジトリにプッシュしたりするのを防ぐため。
git rebase
共有リポジトリにプッシュしたブランチで、そのリポジトリからプルしているすべての人に悲しみを引き起こします。
git stash
これらの場合ですが、編集してコミットしていないファイルがマージによって変更された場合にのみ使用します。