4

次のペーストビンは、各行に 1、2、3、4、5 と入力された 1 つのファイルを含むレポです。

各行は個別に git にコミットされました。

http://pastebin.ca/raw/2136179

次に、コマンドで2行目を削除しようとしましたgit revert <commmit which creates two>

そして得る:

error: could not revert b4e0a66... second
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'

こんなに単純なものに衝突があってはならないのですか?または、私はそれを間違っている/間違ったコマンドを取得していますか?

マージの詳細も意味がないようです:

one
<<<<<<< HEAD
two
three
four
five
=======
>>>>>>> parent of b4e0a66... second

それは、1つを除いてすべてを削除すると言っているのではありませんか? 影響を受けるのは2人だけだと思っていた...

git 1.7.10

4

2 に答える 2

2

あなたの手順を繰り返してみましたが、同じ問題が見つかりました。最新のコミットのみを元に戻すことができるようです。私のリポジトリで:

$ git log --oneline
9a25594 five
f8f1ec4 four
3c75345 three
e6cd245 two
8349ccc one
d2f16c4 for stkofl  <<==== ignore this one

$ git revert 9a25 --no-edit
Finished one revert.
[master 82bbc79] Revert "five"
 1 files changed, 0 insertions(+), 1 deletions(-)
$ git reset --hard
HEAD is now at 82bbc79 Revert "five"

HEAD (最新のコミット) を含む連続したコミットのセットではないコミットのセットを元に戻すことは許可されていないようです。

もちろん、これを行うことができます:

    $ git show e6cd |patch -R
    patching file file
    Hunk #1 succeeded at 1 with fuzz 1.

そして結果をコミットします。

于 2012-04-15T13:45:17.897 に答える
1

変更はコンテキスト diff として保存されます... の diff を見ると、thirdを含む行に関して適用されていることがわかります。twoこれは、 を導入したコミットに依存していることを意味しtwoます。同様に、後続の各コミットは直前のコミットに依存します。これが、導入されたコミットに続くすべてのコミットを削除する理由ですtwo(それらはすべて最終的にそのコミットに依存するため)。これが、一般的なケースでコミットを元に戻すことができることに頼るべきではなく、コミットした直後にのみ行うべきである理由です。

于 2012-04-15T05:42:07.603 に答える