講解 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
廣告