2

コミットの子を見つけることは可能ですか? man ページまたは他の人からの提案のいずれかで、私が見つけたすべてのコマンドには、通常、ブランチ名が含まれています。

私が効果的に行ったことはこれです: 私はコミットツリーを持っています:

A-B-C-D
      ^

私のブランチはDを指しています。

その後、C にロールバックし、E をコミットしました。

A-B-C-D
     \
      E
      ^

ただしgit rev-list、または Sourcetree などのビジュアル ツールでは、当然のことながら、次のように表示されます。

A-B-C-E
      ^

Dへの言及なし。

明らかに、コミット D はまだ私のレポにありますが、コミット ID がないと、見つけるのに苦労しています。コミットの子がどのブランチにいるか、またはブランチにあるかに関係なく、コミットの子を表示するコマンドはありますか?

編集

以下のNevikの回答から--all、参照されていないコミットが表示されていないようです。このコミット構造を取る:

> git log --graph --oneline
* 0ff0f06 d
* ac06e14 c
* 3c45cce b
* b3aa730 a

そして、cにロールバックします:

> git reset --soft ac06
> git log --graph --oneline --all
* ac06e14 c
* 3c45cce b
* b3aa730 a

そして、dにリセットします:

> git reset --soft 0ff0
> git log --graph --oneline --all
* 0ff0f06 d
* ac06e14 c
* 3c45cce b
* b3aa730 a

したがって、コミットは間違いなくまだレポにあります。

4

2 に答える 2

2

git reflog/ git log -g( git log --walk-reflogs) またはを試してくださいgit reflog <branch>


例:

次の状況から始めましょう

> git log --graph --oneline
* 84be53e d
* 8932c9a c
* 05cbe59 b
* 469baa5 a

トップコミットを「削除」します。git commit --amendこれは、トップ (最新) のコミットを修正するのと非常によく似ています。

> git reset --soft HEAD~1

注: これはgit reset --soft 8932c

あなたが書い--allたように、84be53eが到達不能になるため、この状況では役に立ちません。

> git log --graph --oneline --all
* 8932c9a c
* 05cbe59 b
* 469baa5 a

git reflog救助へ... :-)

> git reflog
8932c9a HEAD@{0}: reset: moving to HEAD~1
84be53e HEAD@{1}: commit: d
8932c9a HEAD@{2}: commit: c
05cbe59 HEAD@{3}: commit: b
469baa5 HEAD@{4}: commit (initial): a

ブランチを切り替える場合は、ブランチ固有の reflog の方が適している可能性があります。

> git branch
* master
> git reflog master
8932c9a master@{0}: reset: moving to HEAD~1
84be53e master@{1}: commit: d
8932c9a master@{2}: commit: c
05cbe59 master@{3}: commit: b
469baa5 master@{4}: commit (initial): a

注: 現在のブランチを表示する git-aware シェル プロンプトを使用している場合、git branch現在のブランチを確認するために使用する必要はありません。

git reset --soft 84be5orgit reset --soft HEAD@{1}またはgit reset --soft master@{1}(または latest: の短縮形を使用) を使用できるようになりましgit reset --soft @{1}た。

> git reset --soft @{1}
> git log --graph --oneline --all
* 84be53e d
* 8932c9a c
* 05cbe59 b
* 469baa5 a

参照: reflog 、gitreadyのセーフティ ネット(例)。

于 2013-01-03T10:24:08.010 に答える
0

および--allスイッチを使用して、すべてのブランチからのコミットを表示できます (ブランチにないものも含む)。git loggit rev-list

于 2013-01-03T09:20:28.420 に答える