我有可能找到提交的孩子吗?我在手册页或其他人的建议中找到的所有命令通常都涉及分支名称。
我有效地做了这件事: 我有一个提交树:
A-B-C-D
^
我的分支指向D。
然后我回滚到C,并提交了E:
A-B-C-D
\
E
^
但是在git rev-list
或者像Sourcetree这样的可视化工具中,毫不奇怪,它显示为
A-B-C-E
^
没有提及D.
显然,提交D在我的仓库中是stil,但没有提交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
所以提交肯定还在回购中。
答案 0 :(得分: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 shell提示显示当前分支,那么使用git branch
来检查当前分支是没有必要的。
现在,您可以使用git reset --soft 84be5
或git reset --soft HEAD@{1}
或git reset --soft master@{1}
(或使用较短的格式表示最新版本:git reset --soft @{1}
)。
> git reset --soft @{1}
> git log --graph --oneline --all
* 84be53e d
* 8932c9a c
* 05cbe59 b
* 469baa5 a
另请参阅:<{strong> reflog, your safety net gitready(例如)。
答案 1 :(得分:0)
您可以使用git log
和git rev-list
的--all
开关显示所有分支(甚至不在分支上的分支)的提交。