8

シェルで次のコマンドを試してみました

git init

echo "test1" > test1.txt
git add test1.txt
git commit -a -m "test1"

echo "test2" >> test1.txt

git branch test
git checkout test

text.txt現在含まれています:

test1
test2

testチェックアウト後、すべてのローカル変更を分岐しmasterてマージします。

なんで?

地域の変化により、gitチェックアウトを拒否することを期待していました。gitがコミットまたはローカルの変更testを要求することを期待していました。stash

編集:このコマンドを実行するためにbashスクリプトを使用しました。次の出力が得られます:

r@r:/tmp/test$ ./createrepo 
Initialized empty Git repository in /tmp/test/.git/
[master (root-commit) 0407f5b] test1
 1 file changed, 1 insertion(+)
 create mode 100644 test1.txt
M       test1.txt
Switched to branch 'test'
4

3 に答える 3

16

gitおそらく貴重なデータを失わないように一生懸命努力します。この場合、問題の変更がコミットされていないため、実際にはブランチをマージしていません。むしろ、を実行するgit checkoutと、新しく行われたがまだコミットされていない変更を保持しようとするため、要求しているコミットをチェックアウトし、コミットされていない変更を追加します。コミットされていない変更を本当に破棄する場合は、を使用するgit checkout -fか、git checkoutその後に。を続けgit reset --hard HEADます。まだコミットしていない変更をチェックアウトしているものにきれいにマージできない場合、エラーメッセージが表示され、チェックアウトが失敗することがあります。

于 2012-10-10T16:15:24.683 に答える
0

git checkoutコマンドでオプションを使用しましたか?あなたが説明している振る舞いは、「gitcheckout-f」が使用されているときのように見えるのでお願いします。

于 2012-10-10T15:43:04.163 に答える
0

git checkout ローカルで変更されたファイルを置き換えます。

git merge ローカルと着信の変更をマージし、競合を警告します。

これらのコマンドが着信コミットに存在しないローカルファイルを削除しない場合も同様です。

git reset --hardローカルの変更を完全に消去するだけです。

于 2012-10-10T16:06:55.197 に答える