我如何从我目前的状态转向在某个承诺上拍摄的截图?
如果我做 git 登录,那么我会得到以下输出:
$ 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.
我如何转向11月3日的承诺,即承诺0d1d7fc?
说你在一个名为 ~/commits-to-revert.txt 的文本文件中有下列承诺(我使用 git log --pretty=oneline 来获取它们)
fe60adeba6436ed8f4cc5f5c0b20df7ac9d93219
0c27ecfdab3cbb08a448659aa61764ad80533a1b
f85007f35a23a7f29fa14b3b47c8b2ef3803d542
e9ec660ba9c06317888f901e3a5ad833d4963283
6a80768d44ccc2107ce410c4e28c7147b382cd8f
9cf6c21f5adfac3732c76c1194bbe6a330fb83e3
fff2336bf8690fbfb2b4890a96549dc58bf548a5
1f7082f3f52880cb49bc37c40531fc478823b4f5
e9b317d36a9d1db88bd34831a32de327244df36a
f6ea0e7208cf22fba17952fb162a01afb26de806
137a681351037a2204f088a8d8f0db6e1f9179ca
创建一个Bash Shell脚本,以逆转每一个:
#!/bin/bash
cd /path/to/working/copy
for i in `cat ~/commits-to-revert.txt`
do
git revert $i --no-commit
done
这将一切转向以前的状态,包括文件和目录创建和删除,将其承诺到您的分支和您保留历史,但您将其转向相同的文件结构。
我发现最不复杂的方式,把一个分支转向任何特定的承诺,在那里你不能改变历史,就是:
查看承诺或分支您的愿望转向. 编辑.git/HEAD 并更改转向您转向的分支。
如如:
echo 'ref: refs/heads/example' > .git/HEAD
如果你做 git 状态,你应该看到你所在的分支和你想转向的分支之间的所有变化。
如果一切都看起来很好,你可以承诺. 你也可以使用 git diff revert..example 确保它是相同的。
我相信有些人可能来到这个问题,想知道如何回归他们在主人中所做的承诺的变化 - 也就是说,把一切都扔掉,回到起源 / 主人,在这种情况下,这样做:
git reset --hard origin/master
https://superuser.com/questions/273172/how-to-reset-master-to-origin-master