多分巷で噂になっているであろうSVN脳の方が書いた記事を読んで、
「あれ? Git もチェンジセットの保存じゃなくてスナップショットの保存だよね?」とか
「え、むしろ SVN もスナップショットの保存をベースとした SCM だったんか!」とか
「多分何が本当に違うって、branch の概念なんだろうな」とか色々な気づきを得ることができたわけですが、
それで「git rebase -iにおけるsquashとは、途中の不要なコミットを単に削除することだ」と思ったりする。そうするとコミットの順番を並び替えたりできることの説明がつかず、結局「rebaseはわからん」と匙を投げることになる。
の
そうするとコミットの順番を並び替えたりできることの説明がつかず、結局「rebaseはわからん」と匙を投げることになる。
という部分に関しては完全に同意で、よくわかっていなかったので、せっかくなので学ぼうと思った。
サンプルを用意する
こんなコミットログの
$ git log --oneline -4 --reverse
0c7eac5 :tada: initialize sample code
3dbaf33 :+1: add new function A
57bb9d1 :+1: add new function B
4573e7d :+1: add new function C
こんな Diff の
takayukioda@peach$ git log --oneline -4 -p --reverse
0c7eac5 :tada: initialize sample code
diff --git a/rebase.go b/rebase.go
new file mode 100644
index 0000000..d4a6957
--- /dev/null
+++ b/rebase.go
@@ -0,0 +1,9 @@
+package main
+
+import (
+ "fmt"
+)
+
+func main() {
+ fmt.Println("Learn about `git rebase`")
+}
3dbaf33 :+1: add new function A
diff --git a/rebase.go b/rebase.go
index d4a6957..6c950cb 100644
--- a/rebase.go
+++ b/rebase.go
@@ -6,4 +6,9 @@ import (
func main() {
fmt.Println("Learn about `git rebase`")
+ A()
+}
+
+func A() {
+ fmt.Println("Commit A")
}
57bb9d1 :+1: add new function B
diff --git a/rebase.go b/rebase.go
index 6c950cb..290eace 100644
--- a/rebase.go
+++ b/rebase.go
@@ -7,8 +7,13 @@ import (
func main() {
fmt.Println("Learn about `git rebase`")
A()
+ B()
}
func A() {
fmt.Println("Commit A")
}
+
+func B() {
+ fmt.Println("Commit B")
+}
4573e7d :+1: add new function C
diff --git a/rebase.go b/rebase.go
index 290eace..62f2470 100644
--- a/rebase.go
+++ b/rebase.go
@@ -8,6 +8,7 @@ func main() {
fmt.Println("Learn about `git rebase`")
A()
B()
+ C()
}
func A() {
@@ -17,3 +18,7 @@ func A() {
func B() {
fmt.Println("Commit B")
}
+
+func C() {
+ fmt.Println("Commit C")
+}
最終的にはこんなファイルを用意してみた
package main
import (
"fmt"
)
func main() {
fmt.Println("Learn about `git rebase`")
A()
B()
C()
}
func A() {
fmt.Println("Commit A")
}
func B() {
fmt.Println("Commit B")
}
func C() {
fmt.Println("Commit C")
}
ら
フッツーにコンフリクト起きて「あっ」ってなったのでもう一回サンプル作り直してきます←
rebase を Git Object から理解できたら、結構イケるんじゃないかと思っているから頑張る