4

私は Git に付属するデフォルトの bash を使用しています。マスター ブランチ (裸ではない) を作成し、そこからブランチ (new_feature ブランチと呼びましょう) を作成しました。

私は分岐で遊んでいて、git checkoutコマンドをテストしているポイントに到達しました。私が理解しているように、checkout コマンドを使用すると、あるブランチから別のブランチに切り替えることができます。また、私が理解したことから、チェックアウト コマンドでは、作業ディレクトリが汚れている (つまり、ステージングされていない編集がある) 場合、あるブランチから別のブランチに切り替えることができません。

index.htmlこれで、メイン ブランチとフィーチャー ブランチの両方に名前が付けられたファイルができました。2 つのブランチの両方のファイルの内容はまったく同じです。これが私がやったことです、そしてそれは私を混乱させました。

私は自分の機能ブランチにいます (現在、両方のファイルの内容はまったく同じです) index.html。たとえば、タイトル タグの内容を編集し、それをステージングしなかった場合、コマンド を発行するとgit checkout master、Git でに切り替えることができます。さらに興味深いのはgit status、マスター ブランチ内でコマンドを発行すると、フィーチャー ブランチで行ったステージングされていない変更がマスター ブランチにコピーされることです。破壊的ではないですか?

私をさらに混乱させたのは、マスターブランチとフィーチャーブランチの両方のブランチにある2つのファイルが同じコンテンツを持たない特定の時間に、フィーチャーブランチ内にいてindex.htmlファイルのコンテンツを編集した場合、コマンドを発行するgit checkout masterと、作業ツリーまたはディレクトリが汚れていることが検出されたため、切り替えを行うことができません。

要するに、これらのイベントに基づいて気付いたように、2 つのファイルの内容が同じで、1 つのブランチにいる場合、そのファイルの内容を変更し、その別のブランチにチェックアウトすると、Git で切り替えが可能になり、 Git は、その宛先ブランチに対して行ったステージングされていない変更を運びます。

ただし、2 つの異なるブランチにある 2 つのファイルの内容が異なる場合、1 つのブランチにいて、そのファイルを編集し、checkout コマンドを発行してその別のブランチに切り替えると、Git は切り替えを許可しません。なんらかの理由で、作業ツリーがダーティであることを検出しました。

私の理解は正しいですか、それとも間違っていますか? また、なぜ私の理解が間違っているのか正しいのかについて、少し説明を加えることができます。

4

1 に答える 1

4

ステージングされていない変更は、git の一部ではありません。
git checkoutgit にないファイル (ステージングされていない変更または gitignored ファイルであるかどうか) には影響しません。

git checkoutステージングされていない変更を含むファイルを変更する必要がある場合は、データの損失を防ぐためにエラーが発生します。

つまり、ファイルのバージョンが異なる 2 つのブランチがあり、そのファイルを編集してからもう一方のブランチに切り替えようとすると、ステージングされていない変更を他のブランチのバージョンに置き換えることを拒否するため、エラーが発生します。 .

于 2013-09-09T01:47:05.033 に答える