2

重複の可能性:
git:ブランチを切り替え、コミットせずに変更を無視します。
奇妙な振る舞いをするGitブランチ

一般的な推奨事項は、gitでブランチを切り替える前にクリーンなステータスにすることです。(stashまたはpark-commit)。「ローカルの変更があるとブランチを切り替えることができません」がいつ表示されるかを理解しようとしていますが、ロジックに従うことができません:

version.txtというファイルのリポジトリに「1」というテキストが含まれています。

git checkout -b new

echo 2 >> version.txt(作業ディレクトリはダーティではありません。ファイルを変更しました)

git checkout master(どうしてこれが機能するのですか?私は新しいものに変更をステージング\コミットしていません)

新しいブランチのファイルコンテンツを削除するか、最初にファイルをステージングした場合も同じことが起こります。

「ローカルの変更があるとブランチを切り替えることができません」がいつ表示されるかを誰かが理解するのを手伝ってもらえますか。?

ありがとう、蘭

4

3 に答える 3

5

特定のブランチに変更すると変更されるファイルに変更がある場合、それは非常に簡単です。

例:

$ git init
Initialized empty Git repository in /tmp/asadfasd/.git/
$ echo 1 > bar
$ git commit -am "commit 1 master"
[master (root-commit) 55da003] commit 1
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 bar
$ git co -b testbranch
Switched to a new branch 'testbranch'
$ git co master
Switched to branch 'master'
$ echo 2 >> bar
$ git commit -am "commit 2 master"
[master c6dc6d9] commit 2 master
 1 files changed, 1 insertions(+), 0 deletions(-)
$ git co testbranch
Switched to branch 'testbranch'
$ echo 3 >> bar
$ git co master
error: Your local changes to the following files would be overwritten by checkout:
bar
Please, commit your changes or stash them before you can switch branches.
Aborting

ファイルを変更する前にマスターでテストブランチをリベースすると、ファイルが変更されないため機能します。

別の言い方をすれば、ブランチが分岐していて、分岐したファイルを変更すると機能しません。

于 2011-07-10T03:22:18.033 に答える
2

マスターとテストの HEAD が同じ場合、元に戻すと、テストのローカル変更がマスターに適用されます。

ただし、そうでない場合、たとえば、テストを作成した後にマスターに追加のコミットがあるか、テストに追加のコミットがあると、警告が表示されます。


(以前にこれに回答したことを思い出しました-古い回答をここに貼り付け、この質問を重複として閉じるために投票してください)

ブランチを切り替えていて、ファイルがローカルでのみ変更されている場合、Git は警告/メッセージを表示しません (変更を他のブランチにマージします)。たとえば、マスターにレポがあり、一時ブランチを作成し、ファイルにローカル変更を加えたとします。これで、マスターに切り替えると、メッセージが表示されなくなります。一方、 temp に変更を加えてコミットし (つまり、 temp が master から分岐する)、ローカルに変更を加えると、 master に切り替えるときにそのメッセージが表示されます。

Git ブランチの動作がおかしい

于 2011-07-10T03:22:46.113 に答える
1

ブランチを切り替えると、Git は、切り替え元のリビジョンとは異なるインデックスと作業ディレクトリの部分のみを更新します。2 つのリビジョン間でファイルに違いがない場合は、git checkout変更されたかどうかも確認しません。

あなたの例では、の内容はversion.txt各ブランチで同じです。したがって、Git は、2 つのファイルを切り替えるときに、そのファイルへのコミットされていない変更を喜んで無視します。

于 2011-07-10T05:11:59.570 に答える