2012-01-06 4 views
4

私はマスターブランチを持っており、すべてが問題ありません。次にexperimentalというブランチを作成し、新しいファイルを作成します。私の実験枝では、git addコマンドを使ってこのファイルを追加します。それから私はマスターブランチをチェックアウトします。私のマスターブランチではgit statusを実行し、このファイルも私のmasterブランチに追加されていることを発見します。私はgit commit -m "message"を実行しているが、私のマスターブランチではコミットが発生する。その後私は実験ブランチに切り替えてgit statusを実行し、そのファイルが私の実験ブランチでコミットされていることを発見します。git分岐してコミットする - この困惑する(私にとって)行動の背後にある理論を説明できますか?

これは私が期待していたものです:新しいファイルを追加した後にmasterブランチに切り替えると、そこにファイルが表示されないことが予想されます。結局のところ、私はmasterブランチの間にファイルを作成せず、masterブランチにいる間にファイルを追加しませんでした。だから、私がマスターブランチに切り替えてgit statusを実行すると、なぜファイルがすでに追加され、コミットする準備ができているのでしょうか?そして、マスターブランチにいる間にコミットすると、私が戻ったときに実験ブランチでコミットされているのはなぜですか?それは一度に2つの支店にコミットしましたか?

+0

experimentalブランチに戻ったときに 'git status'が何も表示しないのであれば、ファイルがそのブランチでコミットされたことを意味しません。それはあなたが何かを演奏していないことを意味します。 – jamessan

+0

まあ、それは、私はファイルがコミットされたと思いますので、それはuntrackedファイルとステージングされたファイルを示していません。 – Deonomo

+0

'git log'を使って、あなたの現在のブランチにどのコミットが適用されているか調べます。おそらく、ファイルが "master"ブランチにコミットされていて、 "experimental"ブランチにコミットされていないことがわかります。 –

答えて

8

git addを実行すると、ファイルはではありません。はコミットされ、Gitの「インデックス」にのみ追加されます。実験ブランチでgit addを実行した後、おそらくgit commitを実行したかったでしょう。

Gitでブランチを切り替えると、作業ディレクトリとインデックスの変更は、ブランチスイッチ中に変更された他のファイルと競合しない限り変更されません。あなたの具体的な懸念に対処するために

を...と、このファイルには、私のマスターブランチに追加されていることを発見。

あなたがgit commitを実行していない場合、そのファイルはまだまったくブランチに追加されていません。

+0

私はgit commitをmasterブランチに切り替える前に実行していませんでした。しかし、私がmasterブランチに切り替えてgit statusを実行したとき、ファイルがすでにステージングされているように見えました。ただし、masterブランチではなくexperimentalブランチでステージングしていました。私は混乱は、あなたが "add"コマンドを使ってファイルをステージングするので、私が "add"という言葉を使ったという事実によると思います。 – Deonomo

+0

Gitには、1つの "インデックス"しかありません。変更されたファイルを 'git add 'すると、それはインデックスに入ります。ブランチごとに別々のインデックスがないため、ブランチXではステージングされません。 –

+0

ありがとう、これは役に立ちます。 – Deonomo

関連する問題