🗝️

Gitコマンド入門::revert(marge処理後)「第三十七回」

2021/03/08に公開

みなさん、こんにちは! 今回は、revert の続きで、マージしたコミットで試したいと思います。でも、そんなことできるのかな? 想像してみてもちょっとねぇ~ チンプンカンプン頭が混乱してきま~す。(^▽^;)

言葉でいうと、マージを取り消すのではなく、そのマージ動作の反対をするってことになるのですが、実際のところ結果はどのようになるのか? 試して行きましょう!

前回の記事は、こちら!

https://zenn.dev/shiozumi/articles/62ca4aea6e66f6

git本家本元の情報はこちらから!

https://git-scm.com/book/ja/v2

今日の学習専用レポジトリーはこちら!

https://github.com/shiozumi-makoto/20210308.git

前回の内容の最後は、このような状態です。

Switched to branch 'main'
Your branch is ahead of 'origin/main' by 2 commits.
  (use "git push" to publish your local commits)

$ git log --oneline
55be572 (HEAD -> main) Revert "add text revert"
798e18f add text
ed913ae (origin/main, origin/HEAD) 1st

前回の最終環境は、git clone で取得!

$ mkdir temp <!-- 適当なフォルダーを作成してください!
$ cd temp <!-- そこに移動して、git clone! 
git clone https://github.com/shiozumi-makoto/20210308.git -b main v.0036

$ ls -a v.0036/
.  ..  .git  README.md
// .gitリポジトリと、README.md があればOKです!

$ cd v.0036/
$ git log --oneline
55be572 (HEAD -> main, tag: v.0036, origin/main, origin/HEAD) Revert "add text revert"
798e18f add text
ed913ae 1st

前回の最終コミットの状態は、これで復元できましたね。

マージしたコミットのrevertに挑戦!


// 1st コミットから、subブランチを作成します!
$ git checkout ed913ae983034cceaca721a9380e7240b02d992a -b sub
Switched to a new branch 'sub'

// ブランチmainとsubの確認をしましょう!
$ git branch
  main
* sub

// では、subのREADME.md を編集!
$ echo "sub" >> README.md
$ cat README.md
# git revert
sub // <!-- "sub" の文字が一番下に追加されました。

$ git commit --all -m "add sub"
[sub ddad84e] add sub
 1 file changed, 1 insertion(+)
// 無事、コミット完了!

// README.md の差分を確認
$ git log --oneline

ddad84e (HEAD -> sub) add sub
ed913ae (origin/main, origin/HEAD) 1st
[shiozumi@ovs-009 20210308]$ git log --oneline -p
ddad84e (HEAD -> sub) add sub
diff --git a/README.md b/README.md
index 3e38dba..64eef4f 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,2 @@
 # git revert
+sub // <!-- この部分が追加されていますね。

ed913ae (origin/main, origin/HEAD) 1st
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..3e38dba
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+# git revert

git merge main

$ git branch
  main
* sub  // <!-- ブランチは、sub側を選択中!

$ git merge main
Already up to date!
Merge made by the 'recursive' strategy.

これで無事に、mainブランチを、sub側に取り込みました。マージする直前は、以下のような状態です。したがって、マージすると、そのまま、sub側のREADME.mdの内容となりますね。

ハッシュ値 コメント README.md 補足事項
55be572 add text revert # git revert mainブランチ
ddad84e add sub # git revert sub subブランチ
dbe6271 Merge branch 'main' into sub # git revert sub subブランチのマージ後

マージ後のREADME.md

$ cat README.md
# git revert
sub
// マージした結果は、subブランチ側のREADME.mdとなります。

git log --oneline --graph

$ git log --graph --oneline
*   dbe6271 (HEAD -> sub) Merge branch 'main' into sub
|\
| * 55be572 (tag: v.0036, main) Revert "add text revert"
| * 798e18f add text
* | ddad84e add sub
|/
* ed913ae 1st

ブランチsub側は、ed913ae "1st" のあと、ddad84e "add sub" を実行
main側は、前回の通りで、ed913ae "1st" のあと、798e18f "add text" して、55be572 (main) Revert "add text revert" ですね。

環境が整いましたので、いよいよ、git revert ですが、その前に、git show で、マージ内容の確認から!

$ git show
commit dbe6271cd885ee70bf4dc78a4ec88ad8794ad71e (HEAD -> sub)
Merge: ddad84e 55be572
// このハッシュ値は、マージしたときの、mainとsubです。
// ddad84e <!-- sub側
// 55be572 <!-- main側

Author: Makoto Shiozumi <shiozumi@esmile-hd.com>
Date:   Mon Mar 8 08:24:01 2021 +0900

    Merge branch 'main' into sub
$

マージしたコミットを、revert するときは、マージした両方のコミットのどちらを、取り消すのか選択するので、予め、git show で確認して置きましょう!

  1. ddad84e sub側を選択するときは、-m 1
  2. 55be572 main側を選択するときは、-m 2

まずは、-m 1 で、ddad84e sub側を選択して実行

$ git revert -m 1 dbe6271cd885ee70bf4dc78a4ec88ad8794ad71e
Already up to date! // <!-- 既にアップデート済みとなります。

On branch sub
nothing to commit, working tree clean

cat README.md
# git revert
sub
// 何も、変わっていませんね。

さあ、これをどう解釈して、みなさんに説明するのか、いまの私には、やや自信はありませんけど、、、git revert は、前回の変更内容のコミットと反対の動作しますから、マージしたとき、dbe6271 "Merge branch 'main' into sub" のコミットと、その前の、ddad84e "add sub" とのREADME.mdは、両方とも同じ内容で差分がありませんから、反対の動作をすることも出来ないので、すでに更新済みと理解してみました!(笑)

ハッシュ値 コメント README.md 補足事項
dbe6271 Merge branch 'main' into sub # git revert sub revert処理をしても?
ddad84e add sub # git revert sub ここも同じ内容
$ git diff dbe6271 ddad84e
$
// 差分が無いので、なにも表示されませんけど・・・(^^;;

次に、-m 2 で、55be572 main側を選択して実行

$ git revert -m 2 dbe6271cd885ee70bf4dc78a4ec88ad8794ad71e
[sub 9f9de5d] Revert "Merge branch 'main' into sub"
 1 file changed, 1 deletion(-)
// viエディターが起動して、コメントの修正を求められます。Esc + wq
 
$ cat README.md
# git revert
// main で行った処理になりました。たしか、その処理もrevertでした。

こちら側は、ハッシュ値:55be572 のREADME.mdのファイルの中身が、"# git revert" なので、ハッシュ値:dbe6271との差分があります。したがって、この状態に戻す処理、git revert が実行されました。

ハッシュ値 コメント README.md 補足事項
dbe6271 Merge branch 'main' into sub # git revert sub -
55be572 add text revert # git revert -
$ git diff dbe6271 55be572
diff --git a/README.md b/README.md
index 64eef4f..3e38dba 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1 @@
 # git revert
-sub // <!-- こちらは、差分があります。

git revetの結果を、git log で確認

$ git log --graph --oneline
* 9f9de5d (HEAD -> sub) Revert "Merge branch 'main' into sub"
*   dbe6271 Merge branch 'main' into sub
|\
| * 55be572 (tag: v.0036, ) Revert "add text revert"
| * 798e18f add text
* | ddad84e add sub
|/
* ed913ae 1st

git show でも再確認!

$ git show
commit 9f9de5d9c7cc9769c0537009c22ae4ac69c40164 (HEAD -> sub)
Author: Makoto Shiozumi <shiozumi@esmile-hd.com>
Date:   Mon Mar 8 09:50:49 2021 +0900

    Revert "Merge branch 'main' into sub"

    This reverts commit dbe6271cd885ee70bf4dc78a4ec88ad8794ad71e, reversing
    changes made to 55be5722e0d8020b548644e0e53cf3a1f997bf74.
// git revert で処理したコミット値が表記されてます。

diff --git a/README.md b/README.md
index 64eef4f..3e38dba 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1 @@
 # git revert
-sub
// 差分は、先ほどと同じとなり、無事、revert 処理が実行されていますね。

git revert -m 2 で選択したハッシュ値、55be572 main側の処理が行われたので、結果としても、changes made to 55be572~と、処理した側のハッシュ値が表記されています。

今日は、このぐらいで終わりにして置きますけど、是非、よろしければ、復習も兼ねて、思うところをいくつかのケースでお試しください。尚、実践にて、どんな状況で、このような、マージした後のgit rivert 処理が必要になるのかは、今のところ皆目見当がつきませんけど、少なくても、どう動作するのかだけ覚えて置けば、きっといつか役に立つ日が来るのでしょう!(笑)

それでは、今回はここまで、お疲れ様でした!

最終結果のリポジトリーは、こちらから取得できます!
git clone https://github.com/shiozumi-makoto/20210308.git -b sub v.0036e

https://zenn.dev/shiozumi/articles/dba80f398fe1fb
https://twitter.com/esmile2013

Discussion