我已经按照您所说的做了,完全照着您写的去尝试了
这段文字与IT技术无关。
cd /tmp
mkdir so35588521
cd so35588521
git init
# Initialized empty Git repository in /tmp/so35588521/.git/
touch 1
echo "1" > 1
git add .
git commit -m "first"
# [master (root-commit) 173f431] first
# 1 file changed, 0 insertions(+), 0 deletions(-)
# create mode 100644 1
touch 2
touch 3
git add .
git commit -m "second"
# [master a9fdcc9] second
# 2 files changed, 0 insertions(+), 0 deletions(-)
# create mode 100644 2
# create mode 100644 3
git log
# commit a9fdcc9338c9b3de25c211580a35ab63d1d57c2e
# Author: Me and my email
# Date: Tue Feb 23 22:46:50 2016 +0100
git revert a9fd
# [master dd5a86e] Revert "second"
# 2 files changed, 0 insertions(+), 0 deletions(-)
# delete mode 100644 2
# delete mode 100644 3
正如您所看到的——一切都顺利进行。因此,我想:AHA!她/他一定做了其他的事情,但没有在SO上提及。噢,好吧,我会用我的水晶球找出她/他做了什么。它闲置着还有什么意义呢?
所以,git说要合并。然后,让我们创建一个分支,尝试将其与我们的主分支合并。
git checkout -b a_branch
echo "2" > 1
git status
git add .
git commit -m "third"
git checkout master
echo "3" > 1
git add .
git commit -m "fourth"
git merge a_branch
git revert last_commit_id_from_git_log
现在,那只是我猜测,并在SO上加入了一点幽默感,我希望如此。 如果这不是您所做的,请告诉我们您所做的确切步骤?由于我无法复制您遇到的错误,因此我感到不满意,无法提供帮助。
编辑:
由于OP坚称绝对没有创建分支...
rm *
rm -rf .git
git init
echo -e "line one\n" > 1
git add .
git ci -m "first"
echo -e "line two\n" >> 1
git ci -a -m "second"
git log
git revert "first"
git revert 22873fb5fbf06d80
啊哈,现在我明白了!那个...太奇怪了。
好的,我检查了一下,实际上您是对的,在我的git版本2.6.3中,我可以复制这种行为。实际上,我认为您遇到了相当特殊的情况。发生的事情是,在您的第二次提交之后,git存储了您对文件test.txt所做的更改,并保留了这些更改。现在您告诉它(他?)去revert first_commit_id
,它实际上创建了文件test.txt。我不能确定,但这在我看来似乎是一个小bug。
然而!如果您在第二次提交中添加文件,例如test2.txt
(因此您在git存储库中有两个文件的版本控制),那么revert
将起作用。
git status
查看 git 认为正在发生什么。 - slothbear