2011-10-20 22 views
1

私はスクリプトを使用して、過去12か月間の最初のコミットを毎月チェックアウトしています。時には奇妙なことが起こり、過去のコミットをチェックアウトすることができなくなりました。エラーは、このような何かを行く:これは、何度も起こっているGit Checkoutエラー

error: Your local changes to the following files wold be overwritten by checkout:

db tests/framework.cpp

Please, commit your changes or stash them before you can switch branches. Aborting

(私はちょうどそれらをチェックアウトし、任意のファイルを編集しておりません)。私は通常、Githubからレポの新鮮なコピーをダウンロードして、もう一度プロセスを開始するだけです。しかし、一度それが壊れたら、私はそれを修正する方法を知らないし、それは起こっています。何かご意見は?ここで

git status

for i in {12..1} 

do 

cd 
cd git/mongodb/mongo 

git checkout master     
git checkout $(git rev-list --before "$(date -d "$(date +%Y-%m-01) -$i months 00:01" +%Y-%m)-01" -n 1 HEAD) 
git checkout master 

Gitのステータスの出力に続いて、私のスクリプトで起こっ反復である:

分岐マスターでコミットの上演ではない

変更:

 modified: dbtests/framework.cpp 

未対応のファイル:

 SHA1.txt 
     SHA1.txt. 
     file 
     file. 

変更はあなたがGitはとにかくチェックアウトを済ませるために--forceフラグを使用することができます

+1

スクリプトのその部分のコードを確認できますか? – ctcherry

+0

これが起きたときに 'git status'の出力は何ですか? –

+0

上記を確認してください^^^ – blaughli

答えて

1

をコミットするために追加されません。

代わりに、チェックアウトを使用する代わりに、git reset --hardを使用して、コミットにリセットすることもできます。

+0

'--force'と' git reset -hard'を使うことには欠点がありますか? 'git reset -hard'を使うと、' git checkout master'は私をマスターに戻しますか? – blaughli

+0

'--force'は認識されませんでしたが、' git reset -hard'が動作します。しかし、その後の最新のコミットに戻る方法がわかりません。助けて? – blaughli

+0

'git reset --hard'を使うと、現在ブランチ上にいる場合にブランチポインタを動かします。現在のブランチを変更したくない場合は、新しいブランチをチェックするか、 'git checkout -f'を使用してください。すでにポインタを移動している場合は、リモートトラッキングのリファレンスを使用することができます( 'git reset -hard origin/master')。それに失敗した場合、reflog( 'git reflog')を使用して、ブランチが指し示していた場所を見つけてそれをリセットすることができます。 – Amber