我有一个小的回购有一对夫妇提交的:一个Git复位后,可达承诺不删除
* a0fc4f8 (HEAD -> testbranch) added file.txt
* e6e6a8b (master) hello world now
* f308f53 Made it echo
* f705657 Added hello
* 08a2de3 (tag: initial) initial
另外:
$ git status
On branch testbranch
nothing to commit, working directory clean
我无法理解以下行为。在这种状态下我运行: $ git reset initial
我现在看到:
* e6e6a8b (master) hello world now
* f308f53 Made it echo
* f705657 Added hello
* 08a2de3 (HEAD -> testbranch, tag: initial) initial
我所期待的:提交a0fc4f8将被删除,因为它是不可达。
发生了什么事:
1)做git show a0fc4f8
仍显示提交
2)做git status
显示被添加的file.txt
提交a0fc4f8为未跟踪和文件你好,是由提交f705657加入也显示为未跟踪。
3)运行git gc
或git gc --prune=all
不会删除a0fc4f8,尽管它不再可及,并且没有与其关联的名称/标记。
这是为什么发生?
更新:
$ git fsck
Checking object directories: 100% (256/256), done.
Checking objects: 100% (15/15), done.
更新2:
$ git log --all --decorate --graph --oneline
* e6e6a8b (master) hello world now
* f308f53 Made it echo
* f705657 Added hello
* 08a2de3 (HEAD -> testbranch, tag: initial) initial
$ git gc --force
Counting objects: 15, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (15/15), done.
Total 15 (delta 1), reused 15 (delta 1)
$ git log --all --decorate --graph --oneline
* e6e6a8b (master) hello world now
* f308f53 Made it echo
* f705657 Added hello
* 08a2de3 (HEAD -> testbranch, tag: initial) initial
$ git的节目a0fc4f8仍显示提交
更新3:
$ git reflog testbranch
08a2de3 [email protected]{0}: reset: moving to initial
a0fc4f8 [email protected]{1}: commit: added file.txt
e6e6a8b [email protected]{2}: branch: Created from HEAD
'git fcck'在'git gc --prune = all'后面说了什么? –
@MichałWalenciak:请检查更新 – Jim
如果您运行'git reset(--mixed)initial',那么您的工作目录是未触及的,这就是为什么'a0fc4f8'提交中有所有更改的原因。 – C1sc0