GitHub Windowsクライアントを使用してsyncを実行して、ローカルのマシンにリモートの変更をプルしましたが、同期を完了する前にディスク領域が不足し、同期に失敗しました。今、私は実際にOriginから引き出された変更であるローカルな変更の束を持っているようです。私は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'.
次のプロセスが.git\index
ファイルをロックしていたようです:
ssh-agent.exe
C:\Users\Tom\AppData\Local\GitHub\PortableGit_8810fd5c2c79c73adcc73fd0825f3b32fdb816e7\bin\ssh-agent.exe
プロセスを強制終了し、git reset HEAD
を実行しましたが、今は正常に戻っているようです。
私の場合、これは、管理コマンドプロンプトと非管理コマンドプロンプトの両方から同じGitリポジトリを使用したことが原因です。最後のgit pull
はadmin cmdからのものであり、index
はそれによって作成され、非admin cmdはそれを変更するための十分な許可を持っていませんでした。
私の解決策はindex
を再作成することでした(ワークツリーはそのままに):
del .git\index
git reset --mixed head
index
とindex.lock
(.git
フォルダー内)を削除し、git checkout .
を実行して変更を元に戻し、解決しましたが、変更をコミットする場合は実行しますgit add -A
git commit -m "description"
の後
Git 2.10(2016年第3四半期、4年後)はWindowsの状況を改善するはずです
commit 05d1ed6 (2016年8月23日)by Ben Wijen(Ben
) を参照してください。
mingw
:一時ファイルハンドルが子プロセスに継承されないようにするインデックスがロックされ、子プロセスがそのロックへのハンドルを継承し、親プロセスが子プロセスが終了する前にロックを削除したい場合、Windowsには問題があります:プロセスが保持されるとファイルを削除できないため機能しませんそれらのハンドル。
症状:
Rename from 'xxx/.git/index.lock' to 'xxx/.git/index' failed.
Should I try again? (y/n)
bInheritHandles==FALSE
を使用して子プロセスを生成すると、ファイルハンドルが継承されないため、hStdXxx
(stdin/stdout/stderr)のSTARTUPINFO
ハンドルも継承されないため、機能しません。
O_NOINHERIT
ですべてのファイルを開くことも、たとえばgit-upload-pack
は、継承されたファイルハンドルを想定しています。これは、
O_NOINHERIT
フラグを使用して一時ファイルを作成する唯一の方法です。ただし、このフラグはWindows固有です。
ここでは、O_CLOEXEC
(Windowsには存在しません)と同等であるため、O_CLOEXEC
フラグを使用して一時ファイルを開きます および- WindowsではO_NOINHERIT
にフラグをマップ 。
ファイルをロックしているプロセスを強制終了するか、新しいリポジトリである場合は、.gitフォルダーを削除しますrm -rf .git
そしてgit init
Gitでも同様の問題がありました。私にとっての解決策は、Windowsエクスプローラーを使用してローカルでソリューションを削除し、リポジトリを再クローンすることでした。これにより、マシンにローカルに保存されていたすべてのファイルが削除され、
Rename from '.git/..' to '.git/..' failed. Should I try again? (y/n) y
離れて行く。リポジトリのクローンを作成した後、コマンドを再試行し(私の場合はGIT COMMIT)、失敗は再発しませんでした。
この問題は、機能ブランチを開発ブランチにマージした後に発生したマージ競合を解決しようとしたときに発生しました。
ブランチをマスターでリベースしたときに問題が発生したようです。私の解決策は、ブランチを開いてOriginにハードリセットし、リベースするすべてのソリューションをオフにして、再びリベースすることです。
それは正しい問題である可能性があります。ユーザーの代わりに管理者としてターミナルを実行してみてください。私のために働いた
Tortoise Gitを使用しています。新しいWindowsエクスプローラーを開いたところ、これが修正されました。 (コマンドラインの場合、Gitは新しいシェルを開くだけの場合があります)。
Googleドライブフォルダに保存されたプロジェクトでgit reset HEAD
を実行すると、このエラーが数回連続して発生しましたが、数分後には問題はなくなりました。
ローカルの変更を破棄するには、
git reset HEAD
次に、古いコミットをチェックアウトし、新しいコミットを削除して、もう一度プルします。
git checkout "hashOld"
git branch -d "hashNew"
git pull