私はマスターブランチと別のトピックブランチを持つgitリポジトリに取り組んでいます。トピックブランチに切り替えてファイルを変更しました。ここで、マスターブランチに切り替えると、同じファイルが変更されたものとして表示されます。
例えば:
git-buildブランチのgitステータス:
# On branch git-build
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: cvsup_current
#
マスターブランチに切り替えます
[root@redbull builder_scripts (git-build)]# git co master
M builder_scripts/cvsup_current
Switched to branch "master"
マスターブランチのgitステータス
[root@redbull builder_scripts (master)]# git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: cvsup_current
#
Git-buildブランチで変更されたにもかかわらず、ファイルがマスターブランチで変更されたものとして表示されるのはなぜですか?
私の理解では、ブランチは互いに独立しており、あるブランチから別のブランチに変更しても、変更は1つのブランチから別のブランチに「波及」しません。だから私は明らかにここで何かが欠けています。
誰かが手がかりを手に入れましたか?
これはgitのデフォルトの動作です。
必要に応じて、-fフラグを使用してチェックアウトし、「クリーンチェックアウト」を実行できます。
Git-buildブランチで変更されたにもかかわらず、ファイルがマスターブランチで変更されたものとして表示されるのはなぜですか?
覚えておくべき重要な点は、ファイルがgit-buildブランチでnot変更されたことです。作業コピーでのみ変更されました。
コミットした場合にのみ、チェックアウトしたブランチに変更が戻されます
あるブランチへの変更を一時的に保存し、別のブランチで作業を行う場合は、git stash
コマンドを使用できます。これは、gitを使用することの驚くべき小さな特典の1つです。ワークフローの例:
git stash #work saved
git checkout master
#edit files
git commit
git checkout git-build
git stash apply #restore earlier work
git stash
は変更のスタックを格納するため、複数のチェックポイントを安全に格納できます。名前や説明を付けることもできます。完全な使用情報 ここ 。
変更されたファイルは、追加するまでリポジトリに配置されませんおよびコミットします。トピックブランチに戻ってファイルをコミットすると、マスターブランチには表示されません。
この問題を解決するには、次のことを実行できます。
-f
変更を無視するオプション。変更を保存する場合:
git stash
、ブランチを切り替え、作業を行い、元のブランチに切り替えてgit stash apply
。