web-dev-qa-db-ja.com

GitRevert「ファイルがマージされていないため元に戻すことはできません」

いくつかのGIT関数にテキストを送信する簡単な例を実行しました。リポジトリ内の1つのテキストファイル:

1

変更を追加してコミットしました

その後、txtを変更しました。ファイル先:

1
2

変更を追加してコミットしました

Gitログは次の結果をもたらします:

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でいくつかの手順が必要かどうか疑問に思います。

ご助力ありがとうございます。

10
Math_reald

さて、私はあなたが書いたものを正確に行うことによって、あなたがしたと思うことを試みました

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
# 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!*

さて、それは私が推測しただけで、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
# 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'

ああ、今私はそれを手に入れました!そしてそれは...ビザーレです。

わかりました、確認しましたが、実際にはあなたは正しいです、私のgit --version2.6.3この動作を再現できます。実は、ここでかなりのコーナーケースに入ったと思います。何が起こったのかというと、2回目のコミットの後、gitはファイルに加えた変更を保存しましたtest.txtそしてそれらの変更を維持しました。今、あなたは彼に(それ?)git revert first_commit_id実際にファイルtest.txtを作成しました。はっきりとはわかりませんが、これは私にとって小さなバグのようです。

ただし!もしあなたが、2番目のコミットで-ファイルを追加します、例えばtest2.txt(したがって、2つのファイルがgitリポジトリでバージョン管理されます)、revertが機能します。

4
JustMe