Git の強みの 1 つは、ポインターで動作するため、コミットの削除やリモート ブランチの作成と削除など、さまざまなタスクを比較的簡単に元に戻すことができることです。多くの場合、実際に行う必要があるのは、現在のブランチの HEAD ポインターを目的の場所に正しくリセットすることだけです。これにはかなり幅広いケースが含まれます。
リポジトリ全体の削除または不適切なプッシュ以外で、標準の Git リポジトリで元に戻すことができない、または元に戻すのが非常に難しい最も重要なアクションは何ですか?
Git の強みの 1 つは、ポインターで動作するため、コミットの削除やリモート ブランチの作成と削除など、さまざまなタスクを比較的簡単に元に戻すことができることです。多くの場合、実際に行う必要があるのは、現在のブランチの HEAD ポインターを目的の場所に正しくリセットすることだけです。これにはかなり幅広いケースが含まれます。
リポジトリ全体の削除または不適切なプッシュ以外で、標準の Git リポジトリで元に戻すことができない、または元に戻すのが非常に難しい最も重要なアクションは何ですか?
git を初めて使用するユーザーの間で遭遇する最も一般的な「元に戻すのが難しい」エラーはgit stash
、のgit stash pop
乱用ですgit stash
。検討:
git init /tmp/trash && cd /tmp/trash # make a new repo
echo A > A # create a file
git add A
git commit -m "Initial commit" # add and commit it
echo B > A # ... now change it
git stash # ... and stash it
echo C > A # and change it and commit it again
git add A
git commit -m "Another commit"
git stash pop # now pop the stash
はpop
自動マージを試みA
、競合をスローしますが、もう一度ヒットしてポップから戻ることはできませんgit stash
。これはかなり些細な例ですが、大量の変更セットを頻繁に隠しており、分岐ブランチを頻繁に切り替えて途中で飛び出してしまうと、厄介な場所に陥りやすくなります。git stash drop
つまり、間違った隠し場所を落とした場合のセーフティネットはありません。
一般に、stash
設計された目的のために使用します。ダーティな作業インデックスを隠して別のブランチにホップし、バグを修正し、コミットし、プッシュして元の状態に戻します。多くのブランチにまたがる多くの変更を管理するためにそれを使用しようとすると、細心の注意を払わずに必然的に噛み付きます。
git clean
追跡されていないファイルを削除します。git で復元することはできません。
ダーティな作業ツリーとマージすると、復元が困難になる可能性があります。
つまり、git によって追跡されないものは、git によって復元することはできません。それ以外はすべて復元可能です。
元に戻すのが難しいアクションの例は次のとおりです。
git branch -D some-unmerged-branch-such-as-master
git gc --prune=now --aggressive
最初は、いくつかのコミットへの参照を削除します。2 番目は、参照のないすべてのコミットを削除します。
この質問が、誰かのリポジトリを破棄したいのではなく、ただの好奇心の問題であることを願っていますが、分散バージョン管理に固有の冗長性があるため、あまり心配していません.
私の経験では、人々が実行する最も一般的な不可逆的な行動はgit reset --hard
. 多くの人が を書くときgit reset
、--hard
彼らが本当に必要としているのreset
はおそらく--keep
.