Gitコマンド入門::revert(marge処理後)「第三十七回」
みなさん、こんにちは! 今回は、revert の続きで、マージしたコミットで試したいと思います。でも、そんなことできるのかな? 想像してみてもちょっとねぇ~ チンプンカンプン頭が混乱してきま~す。(^▽^;)
言葉でいうと、マージを取り消すのではなく、そのマージ動作の反対をするってことになるのですが、実際のところ結果はどのようになるのか? 試して行きましょう!
前回の記事は、こちら!
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 で確認して置きましょう!
- ddad84e sub側を選択するときは、-m 1
- 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
Discussion