我做了一个简单的例子来发短信给一些GIT函数.存储库中只有一个文本文件:
1
Run Code Online (Sandbox Code Playgroud)
添加并提交了更改
然后改变了txt.档案:
1
2
Run Code Online (Sandbox Code Playgroud)
添加并提交了更改
Git日志给出以下结果:
commit 00e59212a6...
..
second commit
commit 7c319d587....
..
first commit
Run Code Online (Sandbox Code Playgroud)
那时我想回到第一次提交(但我不想使用"reset --hard".我试过:
git revert 7c319d587
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误消息:
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
Run Code Online (Sandbox Code Playgroud)
我是GIT的新手 - 在我使用SVN之前,你可以很简单地处理这些事情,所以我想知道这些简单的事情是否需要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
Run Code Online (Sandbox Code Playgroud)
正如你所看到的 - 一切都很顺利。因此,我想,啊哈!她/他一定做了别的事情,而忽略了提及。哦,好吧,无论如何,我会弄清楚她/他用我的水晶球做了什么。放在那里毫无用处有什么意义。
所以,合并吧,git 说。然后,让我们创建一个分支并尝试将其与主分支合并。
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!*
Run Code Online (Sandbox Code Playgroud)
现在,这只是我的猜测,我希望能给大家带来一点幽默。如果这不是您所做的,您能告诉我们您所做的具体步骤吗?由于我无法复制您所遇到的错误,因此我无法提供帮助而感到不满足。
编辑:
由于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
# 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'
Run Code Online (Sandbox Code Playgroud)
啊哈,现在我明白了!那……太奇怪了。
好吧,我查了一下,实际上你是对的,在我的git --version2.6.3 上我可以复制这种行为。事实上,我认为你在这里陷入了相当极端的情况。发生的情况是,在您第二次提交之后,git 存储了您对文件所做的更改test.txt并保留了这些更改。现在你告诉他(它?)git revert first_commit_id实际创建了文件 test.txt。我不能确定,但这对我来说似乎是一个小错误。
然而!例如,如果您在第二次提交中添加文件test2.txt(这样您将在 git 存储库中拥有两个文件的版本),那么就revert可以了。
| 归档时间: |
|
| 查看次数: |
12458 次 |
| 最近记录: |