通过研究 Git 对象来思考 `git rebase` 的工作原理
读了一篇被传言在多分巷上被SVN脑的人写的文章后,
“嗯?Git保存的不也是快照而不是变更集吗?”
“额,其实SVN也是以保存快照为基础的SCM啊!”
“可能真正不同的是分支的概念吧。”
因此,我得到了许多不同的见解。
所以我认为在”git rebase -i”中的” squash”就是简单地删除中间不必要的提交。然后解释说可以重新排序提交,但我最终还是弄不明白,最终变得“rebase我不懂”,只能放弃。
I’m sorry, but the provided text “の” is a Japanese hiragana character and does not have a direct translation or equivalent in Chinese. Could you please provide a different sentence or context for me to paraphrase in Chinese?
这样做就无法解释如何重新排序提交的顺序,最终只能放弃理解”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")
}
我和同事发生了冲突,感到很不舒服,所以决定重新制作样品。
如果能够从Git对象理解rebase,我认为会很不错,所以我会努力的。