以前有人问这个问题,但不完全是。
这是我想知道的。
假设我有以下提交的git存储库:
$ git log
commit4
commit3
commit2
commit1
我现在意识到我需要将提交1返回到我的工作区并“重新开始”。我可以这样做:
$ git reset --hard commit1
这将完成我想要的,但如果我再次查看日志:
$ git log
commit1
只显示第一个提交。我真正想看到的是:
$ git log
commit5-same-as-commit1
commit4
commit3
commit2
commit1
我来自颠覆,如果我想在颠覆中实现这一点,那将非常容易。只需查看您本地工作区的特定先前修订版,然后提交。现在,您已经拥有了之前的所有修订版本以及新修订版本。
如何在git中完成此操作?
谢谢!
答案 0 :(得分:4)
可能有其他方式,但这是一个。
git revert -n commit4 commit3 commit2 commit1
将使您的工作树(和索引)返回commit 1
的状态。在此之后,git commit
将在commit 4
之上创建一个新提交,这会将您的树更改为commit 1
处的树。
答案 1 :(得分:2)
作为一名DVCS,Git并没有强制执行一条线性的开发,而是一个有向图。这是我要做的,因为你想要保存其他提交:
$ git branch feature-I-was-working-on commit4
这会创建一个标题为feature-I-was-working-on
的分支,并将其指向commit4
。这样,您可以将此分支放在一边,稍后再回过头来。
$ git checkout commit1
这使您的工作文件与提交commit1
后的工作文件相同。
$ git checkout -b feature-Im-now-working-on
这会创建一个标题为feature-Im-now-working-on
的新分支,并将其指向您当前的提交(如果您一直在跟进,那是commit1
)
现在,如果您git checkout feature-Im-now-working-on
,则无法获得commit2
,commit3
或commit4
中的任何内容。如果您查看feature-I-was-working-on
,就可以获得这些内容。
现在,您已经在分支feature-Im-now-working-on
上,并且您提交了更多提交。这些提交不会进入feature-I-was-working-on
,但您可以随时返回。
但是,让我们说现在您希望commit2
,commit3
和commit4
进入feature-Im-now-working-on
。这很简单!首先检查feature-Im-now-working-on
,然后运行此命令:
$ git merge feature-I-was-working-on
DVCS比Subversion更复杂,但它们也更强大。如果你使用它们而不是反对它们,它们可以让你轻松地做你在Subversion中从未想过的事情。