Git Revert“因为你有未合并的文件而无法恢复”

时间:2016-02-23 21:27:02

标签: git revert

我做了一个简单的例子来发短信给一些GIT函数。存储库中只有一个文本文件:

1

添加并提交更改

然后改变了txt。提交到:

1
2

添加并提交更改

Git log给出以下结果:

commit 00e59212a6...
..
second commit

commit 7c319d587....
..
first commit

那时我想回到第一次提交(但我不想使用“reset --hard”。我试过了:

git revert 7c319d587

但是我收到以下错误消息:

revert is not possible because you have unmerged files
hint: Fix them up in the work tree, and the use "git add/rm
hint: as appropriate to mark resolution and make a commit

我是GIT的新手 - 在我使用SVN之前,你可以很简单地处理这些事情,所以我想知道这些简单的事情是否需要GIT中的几个步骤?

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:4)

好吧,我已经尝试了你的想法,做了你写的

ng-bind-html
你可以看到 - 一切顺利。因此,我想, AHA!她/他一定做了别的事情,而忽略了在SO上提到它。哦,好吧,无论如何,我都会弄清楚她/他用水晶球做了什么。它无处不在的重点是什么。

所以,合并,git说。然后,让我们创建一个分支并尝试将其与我们的主分支合并。

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

现在,我希望,这只是我猜测,并带来一点点幽默。如果这不是你所做的,你能告诉我们你做的确切步骤吗?因为我无法复制你所犯的错误,因此我感到无法实现无法完成。

编辑:

由于OP坚持认为绝对没有成为分支......

git checkout -b a_branch
# Switched to a new branch 'a_branch'
echo "2" > 1
git status
# On branch a_branch ...
git add .
git commit -m "third"
# [a_branch 96d3a7a] third
#  1 file changed, 1 insertion(+), 1 deletion(-)
git checkout master
# Switched to branch 'master'
echo "3" > 1
git add .
git commit -m "fourth"
# [master 7f72eec] fourth
#  1 file changed, 2 insertions(+), 1 deletion(-)
#### Now we have first commit, and second, and revert second, and two commits: third on **a_branch** branch and fourth on **master**. 
git merge a_branch
# Auto-merging 1
# CONFLICT (content): Merge conflict in 1
# Automatic merge failed; fix conflicts and then commit the result.
# *Oh DANG* whyy? Git stop, don't do that it hurts, revert!
git revert last_commit_id_from_git_log
# error: revert is not possible because you have unmerged files.
# hint: Fix them up in the work tree, and then use 'git add/rm <file>'
# hint: as appropriate to mark resolution and make a commit.
# fatal: revert failed
# *Git nope!*

Ahaaa,现在我明白了!那......是bizzaare。

好的,我检查过,实际上你是对的,在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 # commit 23d710610d98c1046844870557208f335e76a933 # Author: ME <me@home> # Date: Tue Feb 23 23:31:28 2016 +0100 # # second # # commit 22873fb5fbf06d80a1779fe6740060c660d68714 # Author: ME <me@home> # Date: Tue Feb 23 23:30:47 2016 +0100 # # first git revert "first" # fatal: bad revision 'first' # but OK i assume You used id, so, git revert 22873fb5fbf06d80 # error: could not revert 22873fb... first # hint: after resolving the conflicts, mark the corrected paths # hint: with 'git add <paths>' or 'git rm <paths>' # hint: and commit the result with 'git commit' 2.6.3我可以复制这种行为。实际上,我认为你在这里遇到了相反的问题。发生的事情是,在第二次提交之后,git存储了您对文件git --version所做的更改并保留了这些更改。现在你告诉他(它?)test.txt实际上创建了文件test.txt。我无法确定,但对我来说这似乎是一个小错误。

然而!如果您在第二次提交中添加文件,例如git revert first_commit_id(因此您将在git存储库中对两个文件进行版本化),则test2.txt可以正常工作。