62

GitHub Windows クライアントを使用して同期を実行し、リモートの変更をローカル マシンにプルしましたが、同期が完了する前にディスク容量が不足し、同期が失敗しました。現在、実際には元から引き出された変更であるローカル変更がたくさんあるようです。git pull を実行しようとしましたが、次のようになりました。

C:\Users\Tom\SourceLog [master +4 ~26 -0 !]> git pull
Updating b3a86e1..5afd74f
error: Your local changes to the following files would be overwritten by merge:
        SourceLog.Interface/IChangedFile.cs
        SourceLog.Interface/ILogEntry.cs
        ...
Please, commit your changes or stash them before you can merge.
error: The following untracked working tree files would be overwritten by merge:
        Lib/MSBuildExtensionPack/4.0.6.0/Ionic.Zip.dll
        Lib/MSBuildExtensionPack/4.0.6.0/MSBuild.ExtensionPack.dll
        ...
Aborting

だから今、私はローカルの変更を破棄しようとしていますが、私は得ています:

C:\Users\Tom\SourceLog [master +4 ~26 -0 !]> git checkout -- .
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) y
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) n
fatal: unable to write new index file

どうすればこれをきれいにできますか? (同期を開始する前に、ローカルに変更はありませんでした。)

アップデート

頭をリセットできないようです..

C:\Users\Tom\SourceLog [master +4 ~0 -0 !]> git reset head
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) y
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) n
error: Could not write new index file.
fatal: Could not reset index file to revision 'head'.
4

23 に答える 23

37

次のプロセスが.git\indexファイルをロックしていたようです:

ssh-agent.exe
C:\Users\Tom\AppData\Local\GitHub\PortableGit_8810fd5c2c79c73adcc73fd0825f3b32fdb816e7\bin\ssh-agent.exe

プロセスを強制終了して実行したgit reset HEADところ、正常に戻ったようです。

于 2012-11-29T22:41:37.053 に答える
4

Git 2.10 (2016 年第 3 四半期、4 年後) は Windows の状況を改善するはずです

Ben Wijen ( )によるcommit 05d1ed6 (2016 年 8 月 23 日)を参照してください。Ben

mingw: 一時ファイル ハンドルが子プロセスに継承されないようにする

インデックスがロックされていて、子プロセスがそのロックへのハンドルを継承し、親プロセスが子プロセスが終了する前にロックを削除したい場合、Windows では問題があります。プロセスが保持されているとファイルを削除できないため、機能しません。それらのハンドル。

症状:

Rename from 'xxx/.git/index.lock' to 'xxx/.git/index' failed.
Should I try again? (y/n)

(stdin/stdout/stderr)のハンドルでbInheritHandles==FALSEさえ、ファイル ハンドルが継承されないため、子プロセスの生成は機能しません。hStdXxxSTARTUPINFO

たとえば、継承されたファイルハンドルが必要なため、すべてのファイルを開くことも機能しO_NOINHERITません。git-upload-pack

O_NOINHERITこれにより、フラグを使用して一時ファイルを作成するという唯一の方法が残ります。ただし、このフラグは Windows 固有です。
私たちの目的では、これはO_CLOEXEC(Windows には存在しない) と同等であるため、フラグを使用して一時ファイルを開き、そのO_CLOEXECフラグをWindowsマップO_NOINHERITします。

于 2016-08-26T06:17:32.300 に答える
2

ローカルの変更を破棄するには、

git reset HEAD

次に、古いコミットをチェックアウトし、新しいコミットを削除して、もう一度プルします。

git checkout "hashOld"
git branch -d "hashNew"
git pull
于 2012-11-29T22:01:52.907 に答える
1

indexand index.lock(.gitフォルダー内)を削除して実行git checkout .し、変更を元に戻して解決しましたが、変更をコミットしたい場合は、後で実行git add -Aしたでしょうgit commit -m "description"

于 2017-10-18T19:11:16.320 に答える
0

ファイルをロックしているプロセスを強制終了するか、新しいリポジトリの場合は、.git フォルダーrm -rf .gitを削除してからやり直してください。git init

于 2017-01-12T18:50:13.680 に答える
0

git init私の問題を解決しました。問題を下回っていました。

Rename from '.git/objects/pack/pack-XXXXX.pack' to '.git/objects/pack/old-XXXXX.pack' failed. Should I try again? (y/n)

于 2020-03-06T07:23:10.940 に答える
0

私は多くの提案を試みました。コミットは成功することもありましたが、その後エラーが返されました。最後に、Dropbox の同期を一時停止するとうまくいったようです。Dropbox 同期がこのエラーを数分以上 (私の 24K を同期するのに必要な時間) よりも長く引き起こす可能性があるかどうかはわかりません.git/index

于 2021-12-18T22:29:48.280 に答える
-1

プロジェクト全体を(Windows 10で)新しいフォルダーにコピーしました。そこからオリジンにプッシュされます (インデックスの問題は発行されません)。次に、問題が発生したプロジェクト ディレクトリに戻りました。.git ディレクトリを削除しました。新たに初期化 (git init)。インデックスに追加されました (git add . )。リモート起点からフェッチされ、マージされます。それだけです。

于 2021-05-30T21:10:45.547 に答える