2

この git ツリーを考えると:

A <--- B <--- C (HEAD, master)

ツリーをこの状態にすることは可能ですか:

A <--- B (HEAD, master) <--- C

( 以外のブランチやタグはありませんmaster。) つまり、コミット ( C) は、ブランチ (またはタグ) が指すコミットまたはブランチ (またはタグ) が指すコミットの祖先でなくても存在できます。 ?

(この質問は、gitブランチの仕組みをよりよく理解するのに役立つ純粋に理論的なものです。)

4

2 に答える 2

2

コミットCは一時的に (ダングリング コミットとして) 存在できます。GC が発生すると、回収されます。

使用する:

git fsck --unreachable

ダングリング コミットとブロブを表示します。あなたが説明したことgitの概念があるため、ダングリングコミットをすぐには作成せず、しばらくの間にとどまることに注意してください。間違いを犯して何かを回復する必要がある場合に備えて、 を維持します。reflogCrefloggitreflog

于 2013-05-01T21:09:33.503 に答える
2

もちろん、

git checkout -b tmp
touch whatever.txt
git add -A
git commit -m "committed!"
git checkout master
git branch -D tmp

master の現在の HEAD が先行するコミットは現在も利用可能ですが、それを指す名前はありません。reflog コマンドなどを使用して、まだアクセスできます。

C が既に存在することを考えると、別の可能性があります。

git checkout -b tmp
git checkout master
git reset --hard HEAD~1
git branch -D tmp
于 2013-05-01T21:09:55.677 に答える