关于git:在提交工作5提交之前。


Working off a commit 5 commits ago. How does one do this best?

本问题已经有最佳答案,请猛点这里访问。

假设我有一个像这样的git log

1
2
3
4
5
6
7
8
9
10
11
12
13
14
commit 8379fef8952c9fde4c4f8bb9b3fb5dab80a61bc9
...

commit cc6c393f707da82aa3f0753db81b148d7eddaaf1
...

commit 6668e9087e3561b7797c91730f4ac0057fa85904
...

commit 2da2d26974d1ef57a02f3dfe2c7b5aa310f2efac
...

commit a625c16a2985d06f10fb72db9e6952fdf51e5000
...

假设我想回到最底层的一个a625c16...,上面的所有工作都很糟糕。我基本上想把我在最后4次提交中所做的一切都吹走,然后从底部提交重新启动。当我签出承诺时,我处于no branch和分离的状态。那是什么意思?我需要做什么才能继续在这个分支上工作,但是从4个提交开始?


如果你没有推这个,你可以

1
git reset --hard a625c16a2985d06f10fb72db9e6952fdf51e5000

这将完全放弃所有更改,并忘记所有发生的更改。但是,这意味着如果你在任何地方发布了这篇文章,你就必须执行git push --force,这可能被认为是危险的/反社会的。

如果你想避免,你可以

1
2
3
git revert 8379fef8952c9fde4c4f8bb9b3fb5dab80a61bc9
...
git revert 2da2d26974d1ef57a02f3dfe2c7b5aa310f2efac

它将彻底地消除所有的更改,并且您可以在不使用--force的情况下进行推送。这确实意味着你所有的改变和逆转都将在历史中可见。


如果您已经有了要作为独立头签出的提交,那么只需执行git branch -f branchname && git checkout branchname