2017-11-24 8 views
0

私は、以下の一連のコマンドを実行します。私はあるブランチの変更が別のブランチで表示されるのはなぜですか?

222 

を参照してくださいそして、私は理由を理解していないこれらのコマンドの結果

git init rep 
cd rep/ 
echo '111' > 1.txt 
git add 1.txt 
git commit -m '1' 
git checkout -b dev 
echo '222' > 1.txt 
git checkout master 
more 1.txt 

を。あなたが見ることができるように、私は「dev」ブランチを作成し、そこに入ります。私はそこでいくつかの変更を行いますが、私は追加せず、コミットしません。なぜ、「dev」から「master」に戻ると、私が「dev」で行った変更が表示されますか?それらを追加し、コミットし、マスターに戻すまで、彼らは開発者のままでいけないのですか?

+0

作業ツリーに変更が加えられました。 'git add'は変更をインデックスにステージングします。 'git commit'は、インデックス内のすべての追跡されたファイルのスナップショットをコミットとして取得します。ブランチはコミットを指すリファレンスです。あなたの場合、変更はまだ作業ツリーにあります。支店はまだ彼らについては知らない。 – ElpieKay

答えて

0

これは、ブランチに変更をコミットしなかったためです。したがってコミットされていない変更は、まだ親コミットに結びついていません。あなたが変更を削除したい場合は

git checkout dev 
git add . 
git commit -m "changed 1.txt" 

を行い

git reset --hard master 

EDIT

DEVとマスターブランチが同じコミットハッシュを指していますか。 .git/refs/headsフォルダを見てください。これは、ブランチが別々のファイルに格納されている場所です。コンテンツは、特定のブランチが指しているコミットハッシュです。したがって、ブランチは単純にコミットのポインタです。

特定のケースでは、masterやdevをチェックアウトするときに、両方が同じコミットを指しているため、操作によって作業ツリーが変更されません。そうしないと、エラーが発生します。 git checkout master

+0

あなたの指示はうまくいきました。これで2つのブランチには異なるバージョンのファイルがあり、 "dev"ブランチで行われた変更はマスターには表示されません(私が期待した通りです)。しかし、私は "dev"で行った変更が "マスター"に移行した理由はまだ分かりません。コミットされた変更が元のブランチに消えたり、そのまま残っていない場合はありませんか? – Roman

+0

@Roman私はあなたの答えに私の質問を編集しました – smerlung

1
git checkout -b dev 
echo '222' > 1.txt 
git checkout master 

変更はあなたが1.txtファイル上で動作する場合、それらがコミットされていなかったので、ラインが上記のいずれかの枝にない中で、あなたがエラーを取得する必要があり、今のdevの枝の上に何かを変更してみてください(そうではありませんでしたインデックスに追加さえさえ)。

Gitブランチは、コミットのポインタです。ブランチをdevからmasterに変更したとき、実際には現在チェックアウトされているコミットは変更されませんでした。このため、Gitは作業ツリーのインデックスまたは内容を1.txtに更新する必要はありませんでした。

0

異なるブランチ間を移動すると、すべての未追跡ファイルは影響を受けません。ファイルシステムに属し、GITはこれらのファイルがどのブランチに属しているかを認識していません。したがって、これらのファイルをコミットすると、GITはどのファイルがどのブランチに属しているかを認識しています。また、ブランチに基づいて作業領域のファイルを削除または追加することができます。

関連する問題