1

これは、今日投稿した質問のフォローアップの質問です。私は git 初心者で、git ブランチの機能の下で試しています。

私は取得しています

ブランチを切り替える前に、変更をコミットするか、それらを隠してくださいエラー。

これが私のgitセットアップです

ブランチ Master にファイル file1 を作成し、それを追加してコミットします。
ブランチ b1 を作成し、そこに切り替えます。そこで、file1 にいくつかの変更を加えてコミットします。
マスターに戻り、いくつかの変更を加えますが、コミットしません
。 b1 に切り替えると、上記のエラーが表示されます。

私の質問は、このエラーを引き起こしている要因は何ですか? このエラーをスローするためにgitが見ているのは何ですか。


別のプロジェクトのこのシナリオを検討してください

ブランチ Master に一時ファイルを作成し、それを追加してコミットします。
ブランチ 'branch1' を作成すると、branch1 に一時ファイルのコピーが作成されます。
マスターの一時ファイルにいくつかの変更を加え、コミットしません。

branch1 に切り替えようとすると、なぜそのエラーがスローされないのですか? 私の理解では、両方のシナリオは似ています。しかし、2 番目のシナリオではなく、最初のシナリオでそのエラーがスローされますか?

SO 誰かが私に説明できますか、ウィンドウ間の切り替えを制御するパラメーターは何ですか?

4

4 に答える 4

4

master に戻り、いくつかの変更を加え、コミットしません。b1
に切り替えようとすると、上記のエラーが表示されます。

との両方に存在するファイルを変更するmasterb1、 に戻すときにそのメッセージが表示されb1ます。
ブランチb1は、これらのファイルで行われたローカルの変更を上書きしますmaster

2 番目のシナリオでは、プライベート ファイル (git でバージョン管理されていない) に変更が加えられています。ブランチを変更してもその内容には影響しないため、スタッシュする必要はありません。


codesearch で git stash の多くの例を見ることができます:

自分がこれをしていることに気付くことはありますか?

$ git checkout some_branch
error: Your local changes to the following files would be overwritten by checkout:
        Gemfile
Please, commit your changes or stash them before you can switch branches.
Aborting
$ git stash
$ git checkout some_branch
$ git stash pop

ここに素敵な小さなショートカットがあります:

$ git checkout --merge some_branch
于 2013-09-11T10:36:46.557 に答える
1

作業ディレクトリの変更を他のブランチのファイルに適用できる変更の上に適用できない場合、エラーが発生します。

最初のシナリオでは、マスターとブランチが分岐しています。file1に変更されていb1ます。マスターにはありません。ただし、マスターのバージョンでローカルに変更を加え、ブランチを切り替えます。のバージョンがマスターのベース バージョンと異なるfile1ため、変更を適用できません。b1

シナリオ 2 では、ファイルのベース コピーは両方のブランチで同じです。ブランチがチェックアウトされている間のローカルの変更は同じになり、それらを簡単に切り替えることができます。

于 2013-09-11T10:36:58.597 に答える