54

私は、マスター ブランチと別のトピック ブランチを持つ git リポジトリに取り組んでいます。トピック ブランチに切り替えて、ファイルを変更しました。ここで、master ブランチに切り替えると、同じファイルが変更済みとして表示されます。

例えば:

git-build ブランチの git ステータス:

# On branch git-build
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   cvsup_current
#

master ブランチに切り替える

[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 ブランチで変更されたにもかかわらず、マスター ブランチで変更されたと表示されるのはなぜですか?

私の理解では、ブランチは互いに独立しており、あるブランチから別のブランチに変更しても、変更はあるブランチから別のブランチに「波及」しません。だから私は明らかにここに何かが欠けています。

手がかり棒を持っている人はいますか?

4

5 に答える 5

67

Why is that the file is shown as modified in master branch even though it was modified in git-build branch?

The key to remember is that the file was not modified in the git-build branch. It was only modified in your working copy.

Only when you commit are the changes put back into whichever branch you have checked out

于 2008-10-29T10:06:14.343 に答える
43

別のブランチで作業をしている間に、あるブランチへの変更を一時的に保存したい場合は、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変更のスタックを保存するため、複数のチェックポイントを安全に保存できます。名前/説明を付けることもできます。完全な使用情報はこちら.

于 2008-10-29T10:26:37.593 に答える
15

これは git のデフォルトの動作です。

必要に応じて、チェックアウトに-fフラグを使用して「クリーン チェックアウト」を実行できます。

于 2008-10-29T10:01:24.290 に答える
10

変更されたファイルは、追加してコミットするまでリポジトリに配置されません。トピック ブランチに戻ってファイルをコミットすると、マスター ブランチには表示されません。

于 2008-10-29T10:00:53.480 に答える
2
  • gitブランチが互いに依存しているわけではありませんが、ブランチごとに個別に完全なコードベースもありません。
  • コミットごとに、Git は変更へのポインターを含むオブジェクトを保存します。したがって、各ブランチは独自の最新のコミットを指し、HEAD は現在いるブランチを指します。
  • ブランチを切り替えると、HEAD ポインターはブランチの特定のコミットを指します。したがって、変更されたファイルがある場合、デフォルトの動作はそれらをコピーすることです。

この問題を解決するには、次のことを実行できます。

  1. オプションを使用-fして、変更を無視します。

変更を保存する場合:

  1. 変更を同じブランチでローカルにコミットしてから、ブランチを切り替えます。
  2. を使用git stashし、ブランチを切り替えて作業を行い、元のブランチに戻ってgit stash apply.
于 2015-06-11T08:13:45.463 に答える