🗝️
Gitコマンド入門::rebase(-i,edit,一括更新?)「第二十二回」
みなさん、こんにちは! 今日は、rebase edit で、Aを更新したら、その後のコミット、B,C,Dにも、変更内容が更新されるケースを試して見たいと思います。どのような状況で使用するのかは、まだ分かりませんが、前回から伝えているように、git自身は差分管理をしていますから、その元の親となるコミットが更新されると、その後に続く、子のコミットにも、変更内容が繁栄されるのでしょう。ただし、ファイルの差分が、親子間で減ったり増えたりしてしまうとNGのようですけど・・・><;;
次回の記事はこちらから!
git本家本元の情報はこちらから!
まずは、テスト環境の設定から!
echo "# rebase" > README.md
echo "# test" >> README.md
git add README.md
git commit -m "1st"
echo "# A+" >> README.md
git add README.md
git commit -m "A+"
echo "# B+" >>README.md
git add README.md
git commit -m "B+"
echo "# C+" >>README.md
git add README.md
git commit -m "C+"
git log -p
echo "# D+" >>README.md
git add README.md
git commit -m "D+"
こちらにも、UPしてあります!
$ git log --oneline --reverse
ae2f46b 1st
a985545 A+
fb52375 B+
6af2a1e C+
7641566 (HEAD -> main) D+
このような状態になります!
ハッシュ値 | コメント | README.md | 補足 |
---|---|---|---|
ae2f46b | 1st | # rebase # test | - |
c0407d3 | A+ | # rebase # test # A+ | ここを変更します |
d5907ab | B+ | # rebase # test # B+ | - |
dc32304 | C+ | # rebase # test # C+ | - |
9ebc383 | D+ | # rebase # test # D+ | - |
$ git rebase -i --root
pick ae2f46b 1st
edit a985545 A+ // ここを、edit に変更して、Esc + wq
pick fb52375 B+
pick 6af2a1e C+
pick 7641566 D+
// vi エディターの内容は、省略!
// ここで、A+の修正を求められます。
// 以下のハッシュ値と、コメント確認! a985545 と A+
Stopped at a985545... A+
You can amend the commit now, with
git commit --amend
Once you are satisfied with your changes, run
git rebase --continue
// まずは、HEADの位置を再確認!
$ git log --oneline --reverse
ae2f46b 1st
a985545 (HEAD) A+
// ハッシュ値、コメントが一致しています。当たり前ですけど。
// 現在のREADME.mdの中身を確認!
$ cat README.md
# rebase
# test // ここを、# test + edit と変更します!
# A+
$ cat README.md
# rebase edit
# test + edit // vi エディターでの変更後!
# A+
$ git add README.md
$ git commit --amend
[detached HEAD c0407d3] A+ edit
Date: Mon Feb 22 21:24:36 2021 +0900
1 file changed, 2 insertions(+), 1 deletion(-)
$ git log --oneline --reverse
ae2f46b 1st
c0407d3 (HEAD) A+ edit
// 変更されましたね!
一応、git diff でも確認して置きましょう!
$ git log --oneline --reverse -p
ae2f46b 1st
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..0998780
--- /dev/null
+++ b/README.md
@@ -0,0 +1,2 @@
+# rebase
+# test
c0407d3 (HEAD) A+ edit
diff --git a/README.md b/README.md
index 0998780..7f52881 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,3 @@
# rebase
-# test
+# test + edit
+# A+
git rebase --continue
$ git rebase --continue
Successfully rebased and updated refs/heads/main.
$ git log --oneline --reverse
ae2f46b 1st
c0407d3 A+ edit // <!-- ここを更新しました!
d5907ab B+
dc32304 C+
9ebc383 (HEAD -> main) D+
[1]
git log で確認!shiozumi@ovs-009 20210218]$ git log --oneline --reverse -U10
ae2f46b 1st
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..0998780
--- /dev/null
+++ b/README.md
@@ -0,0 +1,2 @@
+# rebase
+# test
c0407d3 A+ edit
diff --git a/README.md b/README.md
index 0998780..7f52881 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,3 @@
# rebase
-# test
+# test + edit // <!-- ここを、更新しました!
+# A+
d5907ab B+
diff --git a/README.md b/README.md
index 7f52881..410257b 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,4 @@
# rebase
# test + edit // <!-- 自動で更新されています!
# A+
+# B+
dc32304 C+
diff --git a/README.md b/README.md
index 410257b..f99dd46 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,5 @@
# rebase
# test + edit // <!-- 自動で更新されています!
# A+
# B+
+# C+
9ebc383 (HEAD -> main) D+
diff --git a/README.md b/README.md
index f99dd46..eca1b48 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,6 @@
# rebase
# test + edit // <!-- 自動で更新されています!
# A+
# B+
# C+
+# D+
A+を更新した後は?!
ハッシュ値 | コメント | README.md | 更新 |
---|---|---|---|
ae2f46b | 1st | # rebase # test | - |
c0407d3 | A+ | # rebase # test + edit # A+ | 手動で変更! |
d5907ab | B+ | # rebase # test + edit # B+ | 自動更新 |
dc32304 | C+ | # rebase # test + edit # C+ | 自動更新 |
9ebc383 | D+ | # rebase # test + edit # D+ | 自動更新 |
理由は、さておき、まずは、こうなる!
さあ、どうして、こうなるのかは、ひとまず置いておいて、、、(^^;;
まずは、こういう動作をするっていう事だけは、認識して置きましょう!
ちなみに、開発歴30年以上の私が直感的に思うのは、元を修正したら、その後も当然そういう風に変更したいと思うので、そう動作する仕様にしたのだと直感的に思います。つまり、その方が便利だから、、、いちいち、その後に続く、子供のファイルを、すべて手作業で変更するのも、只の手間ですからね。(苦笑) ただ、それが正しいのか間違いなのかは、まあ、いまのところは気にしないで置きましょう。気にしだしたら、それはそれで、切りもありません。特に現状は、それで行きましょう!(爆笑)・・・というか違ったら、そのとき思考や認識をリプレースすれば、それで良いと思います。最初から正解に辿り着けることも、そう多くはありませんからね~、、、天才なんて、超レアなんです。ちなみに私は、凡人ですよ! 期待した人には、ほんと、ごめんなさいね。[2]
それでは、今回はここまで、お疲れ様でした!
Discussion