問題タブ [git-reflog]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - gc prune と git reflog の有効期限、および関連する構成のスコープ
プッシュされ、後で削除されて再作成される使い捨ての統合ブランチを使用しています。ただし、破棄されたブランチは、次のコマンドで表示できるぶら下がっているコミットとツリーを残しています。git fsck --unreachable --no-reflogs
私はそれらをきれいにすることができました
または同様のものですが、これらのコマンドの範囲と関連する構成を最初に理解したいと思います。
したがって、具体的な質問は次のとおりです。
- 新しいクローンを
gc
スリムにするために、ローカルだけでなく、GitHub でホストされているリモート リポジトリでも、reflog を削除してクリアするにはどうすればよいでしょうか? - 関連する git config 項目 (
gc.pruneexpire
、gc.reflogexpire
、 などgc.reflogexpireunreachable
) を GitHub がホストするリポジトリに設定できますか?
PS: 有用なコンテキストについては、こちらを参照してください:ブランチの下にない Git コミットの一覧表示と削除 (ぶら下がっていますか?)
git - git reflog とログの違いは何ですか?
man ページには、log はコミット ログを表示し、reflog は reflog 情報を管理すると書かれています。正確には reflog 情報とは何ですか? また、ログには含まれていないものは何ですか? ログははるかに詳細に見えます。
git - スカッシュされたコミットを一覧表示する
インタラクティブなリベースを行った後git rebase -i HEAD~20
: ea1234ea などの新しいコミットを取得します。
履歴が reflog にあることは知っていますが、このコミットで押しつぶされたコミットのリストを識別子 (sha) を含めて取得するにはどうすればよいですか?
git show ea1234ea
押しつぶされたメッセージをリストするコミットメッセージを表示しますが、識別子はありません。
macos - Git: 現在のブランチを削除し、reflog を失った
私は以前に異常な git の問題に遭遇し、その後解決しましたが、なぜそれが起こったのかについてはまだ興味があります。
現在作業中のブランチを誤って削除したときに問題が発生しました。通常、git はこれを許可しませんが、OSX では大文字と小文字が区別されないため、2 つのブランチ (1 つは という名前feature/ONE
、もう1 つは という名前) があると考える状況に陥りましたfeature/one
。これらは 2 つの別個のブランチ (主に Linux/大文字と小文字を区別するバックグラウンドから来ている) であり、feature/ONE に取り組んでいると考えて、feature/one を使用して削除しようとしましgit branch -D
た。
自分が行ったことにすぐに気付き、失われた作業を から取得しようとしたところgit reflog
、エラーが発生しましfatal: bad default revision 'HEAD'
た。を使用して通常の状態に戻そうとしましたがgit checkout -f develop
、うまくいきました。しかし、git reflog
この後調べてみると、残念ながらcheckout: moving from feature/ONE to develop
. 以前のアクションはログに表示されませんでした。
この種のシナリオを再現するためのいくつかの手順をまとめました (おそらく、これは大文字と小文字を区別しないファイルシステムでのみ可能です)。
それ以来、 をチェックすることで失われたコミットを見つけることができましたgit-fsck
が、私の質問は次のとおりです。
この一連のアクションで reflog が壊れたのはなぜですか? ブランチが削除されたとしても、reflog は HEAD ref の履歴をまだ知っているべきではありませんか?
git - reflog の有効期限が切れた後にオリジンにプッシュし、gc prune
を使用して、ローカルリポジトリで到達不能でぶら下がっているコミットをいくつか削除しました
しかし、削除されたコミットはオリジン (正確には GitHub) で引き続き利用できることがわかりました。
試しgit push --force
ましたが、変更がオリジンに同期されません。変更をオリジンに強制的に同期するにはどうすればよいですか (到達不能/ぶら下がっているコミットもリモートから削除されます)。
これは、答えのない同様の質問です。