講解 Git 中的變基


變基更改了一系列提交。它將一系列提交從當前分支移至或重新放置在目標分支上。預設情況下,當前分支上不在另一個分支上的提交會被重新設定為基準。變基技術允許我們保留線性的歷史記錄。

讓我們從下面的圖表中理解這一點。

為了重新設定基準,我們需要處於要重新設定到目標中的分支中。在我們的場景中,我們需要在功能分支上執行變基命令。執行變基命令後,我們將獲得一個線性的歷史記錄。

執行變基命令後,功能 *F1* 和 *F2* 上的提交重新定位到主分支,使其看起來好像該分支是從提交 *C3* 建立的,如下圖所示。

範例

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo
$ git init
Initialized empty Git repository in E:/tut_repo/.git/

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ echo hello>hello.txt


$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git add hello.txt

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git commit -m 'c1'
[master (root-commit) 46736ad] c1
1 file changed, 1 insertion(+)
create mode 100644 hello.txt

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git branch feature

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git switch feature
Switched to branch 'feature'

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature)
$ echo world>world.txt

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature)
$ git add world.txt

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature)
$ git commit -m 'world'
[feature b95055e] world
1 file changed, 1 insertion(+)
create mode 100644 world.txt

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature)
$ echo world again>>world.txt

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature)
$ git commit -am 'F2'
[feature 2d954e6] F2
1 file changed, 1 insertion(+)

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature)
$ git log --oneline --all --graph
* 2d954e6 (HEAD -> feature) F2
* b95055e world
* 46736ad (master) c1

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature)
$ git switch master
Switched to branch 'master'

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ echo hello again>>hello.txt

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git commit -am 'c2'
[master c99c97a] c2
1 file changed, 1 insertion(+)

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git log --oneline --all --graph
* c99c97a (HEAD -> master) c2
| * 2d954e6 (feature) F2
| * b95055e world
|/
* 46736ad c1

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git switch feature
Switched to branch 'feature'

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature)
$ git rebase master
Successfully rebased and updated refs/heads/feature.

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature)
$ git log --oneline --all --graph
* 67dfc66 (HEAD -> feature) F2
* c4a8dc7 world
* c99c97a (master) c2
* 46736ad c1

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (feature)
$ git checkout master
Switched to branch 'master'

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git log --oneline --all --graph
* 67dfc66 (feature) F2
* c4a8dc7 world
* c99c97a (HEAD -> master) c2
* 46736ad c1

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git rebase feature
Successfully rebased and updated refs/heads/master.

$ dell@DESKTOP-N961NR5 MINGW64 /e/tut_repo (master)
$ git log --oneline --all --graph
* 67dfc66 (HEAD -> master, feature) F2
* c4a8dc7 world
* c99c97a c2
* 46736ad c1

更新於:2021 年 4 月 30 日

900 次瀏覽

開啟您的 職業生涯

完成課程並獲得認證

開始
廣告