56

現在、同僚と私は両方とも 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

基本的に、コミットされていない変更を削除し、マージしてから変更を再適用します。取り込もうとしている変更を作業ツリーに自動的にマージするようにマージに指示するにはどうすればよいですか?

4

4 に答える 4

45

転覆から学んだことはすべて忘れてください。

外部の変更を導入する前に、必ずコミットしてください。

ほぼ完全に機能するツリーがあったと想像してください。完璧ではないかもしれませんが、ある程度の進歩はしています。次に、マージを実行すると、持ち込んだコードが大混乱を引き起こしました (それ自体にバグがあり、対処するには競合が多すぎるなど...)。それを元に戻すことができればいいと思いませんか?

コミットすれば、できます。そうしないと、苦しむだけです。

覚えておいてください: コミットするものはプッシュするものである必要はありません、コミットしないものは簡単に失われる可能性があります。

安全で簡単なことを行い、早期にコミットし、頻繁にコミットしてください。

于 2009-05-02T01:45:08.777 に答える
24

私が知る限り、あなたができる最善のことは、あなたがすでに持っているものですgit stash. 私も、merge がきれいなツリーだけを扱いたいと思うのは奇妙だと思います。

于 2009-05-02T00:35:41.063 に答える
2

git mergeローカル リポジトリに関して変更があるファイルの変更をマージするように指示することはできません。これにより、マージがうまくいかないときに変更が失われるのを防ぐことができます。

マージに対する CVS と SVN のアプローチでは、更新前にファイルを手動でコピーせず、マージ時にファイルが混乱した場合、手動で再編集して良好な状態に戻す必要があります。

変更をコミットするか、マージを行う前に隠しておけば、すべて元に戻すことができます。マージがうまくいかない場合は、いくつかの方法を試して、最も効果的な方法を選択してください。

実験的またはデバッグの変更をgit rebaseコミットする場合は、取得したコミットの後にそれらを移動して、それらをgit merge簡単に削除したり、誤ってリポジトリにプッシュしたりしないようにすることができます。

git rebase共有リポジトリにプッシュしたブランチで使用すると、そのリポジトリからプルしているすべての人に悲しみが生じることに注意してください。

私はこれらの場合に使用することを好みgit stashますが、編集してコミットしていないファイルがマージによって変更される場合にのみ使用します。

于 2010-01-22T14:05:03.883 に答える