如何从当前状态恢复为在某个提交时创建的快照?
如果我这样做git log,那么我得到以下输出:
$ git log
commit a867b4af366350be2e7c21b8de9cc6504678a61b`
Author: Me <me@me.com>
Date: Thu Nov 4 18:59:41 2010 -0400
blah blah blah...
commit 25eee4caef46ae64aa08e8ab3f988bc917ee1ce4
Author: Me <me@me.com>
Date: Thu Nov 4 05:13:39 2010 -0400
more blah blah blah...
commit 0766c053c0ea2035e90f504928f8df3c9363b8bd
Author: Me <me@me.com>
Date: Thu Nov 4 00:55:06 2010 -0400
And yet more blah blah...
commit 0d1d7fc32e5a947fbd92ee598033d85bfc445a50
Author: Me <me@me.com>
Date: Wed Nov 3 23:56:08 2010 -0400
Yep, more blah blah.
Run Code Online (Sandbox Code Playgroud)
如何从11月3日恢复提交,即提交0d1d7fc?
是否有一个git命令可以恢复工作树和索引中的所有未提交的更改,还可以删除新创建的文件和文件夹?
我知道Git会跟踪我对我的应用程序所做的更改,并且它会保留给他们,直到我提交更改,但这里是我挂断的地方:
当我想恢复到之前的提交时,我使用:
git reset --hard HEADRun Code Online (Sandbox Code Playgroud)
而Git回归:
HEAD is now at 820f417 micro
Run Code Online (Sandbox Code Playgroud)
然后,我如何将硬盘上的文件恢复为之前的提交?
我接下来的步骤是:
git add .
git commit -m "revert"
Run Code Online (Sandbox Code Playgroud)
但我的硬盘上没有任何文件发生变化......
我在做什么是对还是错?
我有一个git存储库,如下所示:
A -> B -> C -> D -> HEAD
Run Code Online (Sandbox Code Playgroud)
我希望分支的头部指向A,即我希望B,C,D和HEAD消失,我希望头部与A同义.
听起来我可以尝试改变(不适用,因为我推动了之间的变化),或者还原.但是如何恢复多个提交?我一次还原一个吗?订单重要吗?
我怎样才能回滚到git中的特定提交?
有人可以给我的最佳答案是使用git revertX次,直到达到所需的提交.
所以,假设我想恢复到20次提交的提交,我必须运行20次.
有更简单的方法吗?
我无法使用重置,因为此存储库是公共的.
撤消特定提交的最简单方法是:
因为如果它不是最新的提交,
git reset HEAD
Run Code Online (Sandbox Code Playgroud)
不起作用.而且因为它被推到了遥远的地方,
git rebase -i
Run Code Online (Sandbox Code Playgroud)
和
git rebase --onto
Run Code Online (Sandbox Code Playgroud)
将导致遥控器出现一些问题.
更重要的是,我不想真正修改历史.如果有错误的代码,它就在历史中可以看到.我只想在工作副本中使用它,我不介意反向合并提交.
换句话说,以下svn命令的Git等价物是什么:
svn merge -r 303:295 http://svn.example.com/repos/calc/trunk
Run Code Online (Sandbox Code Playgroud)
通过反向合并这些修订中的所有更改,将所有更改从295移除到302,作为新提交.
svn merge -c -302 ^/trunk
Run Code Online (Sandbox Code Playgroud)
当然,通过添加另一个反向合并来自相应提交的更改的提交来撤消302提交.
我认为它应该是一个相当简单的Git操作和一个相当常见的用例.原子提交还有什么意义?
我们已经举办藏起来,并要保证的提交是完全原子,你不应该能够很容易地撤销这些原子提交的一个或多个?
如何撤消上次提交后对目录所做的每次更改,包括删除添加的文件,重置已修改的文件以及添加已删除的文件?
我想了解如何重新恢复或回滚文件和项目到以前的状态,不明白之间的差别git revert,checkout和reset.为什么有3个不同的命令看似相同的目的,何时有人选择一个而不是另一个?
我在这里遇到了一个问题:我28s在Git中有一个特定于问题的分支,我在一般develop分支中合并.事实证明我做得太快了,所以我使用git-revert来撤消合并.然而,现在是合并的时候28s了develop,但是git-merge命令看到了原始的合并,并且愉快地宣布一切都很好并且分支已经合并.现在我该怎么做?创建'还原'还原"28s - >开发""提交?似乎不是一个很好的方法,但我现在无法想象任何其他.
树结构是什么样的:

错误地,我做了git add .并且git commit在develop分支机构.但幸运的是,我没有这样做git push.
所以我想把它恢复到原始状态.
我试过了git reset --soft,git reset HEAD --hard但看起来我搞砸了.
我该如何解决?我想回到原始状态并可能保持代码更改.
git ×10
git-revert ×10
git-reset ×7
git-checkout ×3
git-commit ×2
commit ×1
git-clean ×1
git-merge ×1
head ×1