質問

SVNから来て、ちょうどgitのに慣れ始めています。

ブランチはgitのに削除された場合、

、それが履歴から削除されますか?

SVNでは、あなたは簡単に削除操作(逆マージを)戻すことで枝を回復することができます。分岐が実際に削除されることはありませんSVNのすべての削除と同じように、それは単に現在のツリーから削除されます。

分岐が実際にはgitで履歴から削除された場合は、

、何がそのブランチからマージされた変更になりますか?彼らは保持されていますか?

役に立ちましたか?

解決

ブランチはgitのコミット中にだけポインタです。 gitのでは、それぞれが完全なソースツリーを持ってコミット、それは特別な「トランク」と並んで、リポジトリの別々のフォルダ "内(慣例により)すべてのブランチとタグがライブのsvnとは非常に異なった構造である。

それが、その後削除された前の分岐が別のブランチにマージされた場合は最初の分岐が削除されたときにコミットのすべてが、まだ他のブランチから到達可能になります。彼らがいたとして、彼らは正確に残っています。

ブランチがそのブランチのコミット(からフォーク時点までは、それがまだ到達可能なコミット)別のブランチにマージされずに削除された場合は、

視認できなくなります。

のコミットはまだリポジトリに保持され、すぐに削除した後にそれらを回収することが可能であるが、最終的に彼らはゴミを収集されます。

他のヒント

でGitに、ブランチはコミットの非循環有向グラフ(DAG)にコミットするだけポインタ(参照)です。ブランチを削除すると、DAG内のいくつかのコミットは、到達不能ように見えなくなるかもしれないのコミットへの参照のみを削除することをこの意味。しかし、削除された枝の上にあったすべてのコミットはまだ到達できないコミットが(例えばgit gcを使用して)剪定取得少なくともするまで、リポジトリになります。

それは確かにそれを削除すると、到達不能コミットを残していないだろうということができない場合git branch -dはブランチを削除することを拒否することを

注。あなたはそれが到達不能コミットを残す可能性がある場合は、分岐の力の削除に強いgit branch -Dを使用する必要があります。

それらが存在する場合は、

注意も到達不能コミットは、のみ削除された枝の最後の先端との間にコミットしているGOTがどのコミットタグを付け、他の既存のブランチにマージ、または分岐点コミットのいずれかであることを。どちらかは後です。たとえば、次のような状況でます:

----O----*----*----/M----*    <-- master <-- HEAD
     \            /
      \--.----.--/--x---y     <-- deleted branch

のみコミットの「x」と「y」はブランチを削除した後、到達不能になってしまう。

あなたはgc.reflogExpire期間内に削除されたブランチ上で動作している場合、デフォルトの90日には、あなたがHEADのREFLOGに記録されて削除された枝の最後の先端を持っているでしょう(git reflog show HEAD、またはgit log --oneline --walk-reflogs HEADを参照してください)。あなたは、削除されたポインタを回復するためにHEADのREFLOGを使用することができるはずです。注また、この場合には、単に削除したブランチに到達できないコミットはデフォルトで30日ですgc.reflogExpireUnreachable期間内(削除)剪定から保護されるだろう。

あなたはHEADのためREFLOG中だけで削除された枝の先端を見つけることができない場合は、

、あなたは見つけることgit fsckを使用しようとすることができ、「到達不能コミット」、および先端を見つけるために、(git show <sha1>またはgit log <sha1>経由)これらを調べます削除された枝のます。

あなたが削除された枝の先端を見つける方法についての独立したが、あなたは削除を取り消すことができ、あるいはむしろ

を使用して、単に削除したブランチを再作成します
git branch <deleted-branch> <found-sha1-id>

注しかしブランチのREFLOGが失われてしまうこと。

<時間>

もあります git-resurrect.shする指定された名前と復活(元に戻す)こと。

との分岐先端の痕跡を見つけることができますcontrib/でスクリプト
誤って削除した枝を心配されており、もはやあなたのレポのローカルコピーを持っていない場合は、

、そこに歴史の書き換えや枝の削除を検出しますヘリットのような企業のGitサーバへの拡張は、ある特殊なREFの下でそれらをバックアップします彼らは必要に応じて復元することができ、ガベージコレクションによって剪定されませんように。法律上の理由のために必要であれば、ゲリット・管理者が選択したままのコミットを削除することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top