代碼版本管理筆記 | Python 程序員也應該會的 Git 分支操作
第一時間關注Python技術干貨!
查看分支
分支分為兩種,一種是本地已經(jīng)存在的,還有一種是服務器上有, 但本地不存在的分支,查看的方式稍有區(qū)別。
查看本地分支
git branch
命令行綠色標記的為當前所在的分支
查看本地的分支和遠程的所有分支
git branch -a
remotes/ 開頭,這說明這個分支并不在本地
新建分支
新建分支有兩種情況,第一種是遠程已經(jīng)有的分支,需要把它在本地也同樣創(chuàng)建一份;還有一種是新建一個遠端和本地都不存在的分支。
導入遠程分支
把遠程分支在本地創(chuàng)建,可以通過 git checkout 分支名 命令進行,這個命令其實是切換分支用的。但當它發(fā)現(xiàn)你本地不存在這個分支,會自動找到遠程對應的分支然后在本地進行創(chuàng)建
git checkout 分支名
新建本地分支
創(chuàng)建的分支結(jié)構(gòu)和內(nèi)容會與當前所在的分支一模一樣,也就是說,它其實就是復制了當前的分支
git checkout -b 分支名
這個時候遠程分支還不存在,所以不能直接推送,需要在第一次推送的時候指定遠程分支名
git push --set-upstream origin 分支名
合并分支
合并代碼
合并的時候, Git 會對比兩個分支代碼的差異,當 要合并的分支處于比較新的狀態(tài)時候, Git 會將合并的分支的代碼和提交記錄復制到 master 分支中來
git merge 分支名
查看合并記錄
git log
刪除分支
當我們修改完 bug 之后,就需要刪除分支以減少倉庫的體積
刪除分支的操作分為強制刪除和普通刪除
普通刪除
git branch -d 分支名
一般情況下,刪除使用普通刪除即可。普通刪除相對來說比較安全,避免造成數(shù)據(jù)丟失的情況
強制刪除
git branch -D 分支名
在極少數(shù)情況下你可能會遇到普通刪除無法將分支刪除的情況,強制刪除命令執(zhí)行完畢之后,使用 git log 會發(fā)現(xiàn)原來的分支已經(jīng)沒有了。
比較分支差異
查看代碼差異
git diff 分支1 分支2 --stat
顯示文件具體修改
git diff 分支1 分支2 [filename]
顯示全部文件的修改
git diff 分支1 分支2
查看提交記錄差異 - 查看新紀錄
我基于生產(chǎn)分支上新建了一個 dev 分支,然后提交了代碼;但某些原因,我忘記了我提交了幾次修改,此時我就可以通過查看 dev 分支中有的記錄而在生產(chǎn)分支中沒有的記錄
git log dev ^master
比較兩個分支之間的差異
git log 分支1...分支2
# 查看各記錄存在哪些分支上
git log --left-right 分支1...分支2
刪除過期分支
如果發(fā)現(xiàn)一些分支不需要了,我們可以手動刪除,以此提高響應速度;一般兩類分支可能需要清理:
1、本地不存在,遠程存在該分支,但不需要了
2、遠程不存在,本地存在該分支,也不需要了
清理遠程分支
# 查看分支列表
git branch -a
# 刪除遠端分支
git push origin --delete 分支名
清理本地分支
# 查看分支列表
git branch -a
# 查看遠程倉庫分支
git remote show origin
# 查看遠程分支已刪除但存在的本地分支
git fetch --prune origin
# 查看關聯(lián)失效的分支
git branch -vv
# 刪除本地分支
git branch -d 分支名
恢復已經(jīng)刪除的分支
git log 命令,這條命令可以顯示所有提交過的版本信息,但我們對分支的一些管理操作并不會顯示出來,這些管理的操作日志并不是沒有記錄,而是需要使用 git reflog 命令才能顯示
# 顯示分支操作記錄
git reflog show
# 復制操作前的 commit id
git checkout -b 分支名稱 [commit id]
回滾 reset 操作
如果你不小心使用 git reset 回滾了提交記錄,想找回之前的提交記錄也是可以的;可以 git reflog 查看操作歷史,找到執(zhí)行 git reset 命令之前 commitid ,然后 git reset --hard 到那個 commitid 即可
從歷史版本中找回刪除的文件
有時候,我們在某個版本中刪除了文件,后來又突然發(fā)現(xiàn)需要這個文件,是可以恢復的;恢復之前首先確定要恢復的文件在哪一個版本( commit )中,假設那個版本號是:7a4312sd ,文件路徑為 abc.php 那么參考命如下
git checkout 7a4312sd abc.php
對比分支下的指定版本
對比一個分支下的不同版本
git diff [commit id1] [commit id2]
跨分支比較差異
# 不同分支不同版本比較
git diff [分支名] # 對比不同分支最后一個版本比較
# 不同分支的歷史版本比較
git diff [commit id1] [commit id2]
合并代碼
假設現(xiàn)在有三個分支,分別為 develop、test、master
這個時候需要將 develop 分支的代碼合并到 test 然后 再合并到 master
# 先切換到 test 分支
git checkout test
# 將 develop 分支合并到 test
git merge develop
代碼沖突
可以看到?jīng)_突符號以 <<<<<< 開始,以 ====== 符號為分界符號,上面的是當前 test 的,下面的是 develop 分支的,最后以 >>>>>> 為結(jié)束符
解決沖突后這里提交版本的方式稍微有一些區(qū)別,會在 git commit 后面增加一個 -a 參數(shù),而且不需要 -m 參數(shù)
git merge 命令合并代碼之后,版本記錄會按照時間順序排序,并自動產(chǎn)生一個 Merge branch 的版本;
git rebase 命令合并代碼之后,版本記錄會將目標分支的版本放在后面,然后再將當前分支的版本記錄放在前邊。
合并指定的版本至其他分支
git cherry-pick 命令是一個使用頻率比較低,但在需要使用的場景時候非常省事,比如說,你在 develop 分支中開發(fā),提交了 10 個版本,只有 2 個版本是穩(wěn)定可以測試的,另外幾個版本不可以,然后需要趕緊將兩個穩(wěn)定的版本提測,這個時候就可以使用 git cherry-pick 命令了
1、在 develop 分支找到穩(wěn)定版本的 commitid
2、切換分支到 test 然后依次執(zhí)行 git cherry-pick 命令
3、通過 git log 檢查是否正確
對了,看完記得一鍵四連,這個對我真的很重要。
