Git 便捷操作

2022-09-26 21:02:11

雖然現在有很多圖形化的 Git 工具,但是命令列依然 yyds。本文記錄了工作中很有用的一些 Git 操作。

1.Fork出來的Git倉庫同步程式碼

背景:有的時候從原倉庫fork出了一個新倉庫,這個新倉庫做了自己的修改。可是原倉庫也進行了更新,比如修復了bug,增加了新特性之類的。這個時候想要把原倉庫程式碼同步過來。

原理:把原倉庫的程式碼拉到本地,然後通過git merge把原倉庫分支程式碼合到自己的分支程式碼。

  1. 先拉取原倉庫程式碼到本地
git remote add upstream (填寫你倉庫git地址)

git fetch upstream

這樣就把原倉庫程式碼拉到本地了,而且 upstream 跟原倉庫進行了繫結。(類似origin的繫結,upstream 也可以命名為其它的名稱)

此時執行git remote,會看到有兩個:

origin
remote
  1. 合併分支

切換到fork倉庫的分支,可以新建一個合併分支。然後執行命令:

# 分支名不一定得是master,也可以是其它的原倉庫分支。
git merge upstream/master 

如果有衝突就要解決衝突,解決完執行下命令即可:

git merge --continue

最後,如果完成了,可以執行命令移除這個繫結。

git remote remove upstream

2.合併多個提交

完成一小部分功能進行提交是一個良好的習慣,有利於我們隨時回溯程式碼。然而整體功能沒完成是不能提交到主幹的,而且也傾向於整體功能完成合併為一個提交。因此原生的多個小提交合併成一個提交就很有必要了。下面舉個栗子演示合併操作。

執行git log,檢視歷史提交:

commit 03c72b6dfc24c6bf6f60e2c922552249cc3e5376

git test 3

commit 24276fbd0495c4b337f4058726a48e68118eac0a

git test 2

commit 9f92d8624a3adf7cd6fb69268f99d864390838c4

git test 1

假設要將前兩筆提交合並,則記錄下第三筆的commitId:9f92d8624a3adf7cd6fb69268f99d864390838c4。(第三筆提交不參與合併)

執行以下命令:

git rebase -i 9f92d8624a3adf7cd6fb69268f99d864390838c4

執行後會彈出以下:

pick 24276fbd git test 2

pick 03c72b6d git test 3

# 省略以下內容

此時要將除第一個外的pick改為squash或者s。即改完後為:

pick 24276fbd git test 2

s 03c72b6d git test 3

# 省略以下內容

改完儲存退出,會彈出commit message修改介面,修改儲存即可。

再執行git log發現提交已經合併了。

commit 980d318f91f2faa1d748ae5a963b692162dd521c

git test merge


commit 9f92d8624a3adf7cd6fb69268f99d864390838c4

git test 1

3.程式碼回退

1、在工作區的程式碼

# 丟棄某個檔案
git checkout -- 檔名

# 丟棄全部
git checkout -- .

2、git add到了索引區

# 回退索引區所有檔案
git reset HEAD .

# 回退索引區指定資料夾
git reset HEAD 資料夾名

3、commit 到本地分支的程式碼

# 回退最新一筆提交
git reset --hard HEAD^

# 回退到指定的版本
git reset --hard 版本號

這裡說下reset時,指定--hard、--soft、--mixed的區別:

  • hard: 回退時HEAD指標被回退,索引區、工作目錄都被重置了。

  • soft: 只改變了歷史提交(HEAD指標),索引區和工作目錄沒有更改。

  • mixed: 不指定時預設為mixed,改變了歷史提交(HEAD指標),重置了索引區。

4.使用worktree

當你的專案很大,而有多個特性需要開發時,為了避免頻繁切換分支,可以使用git worktree

git worktree非常適合大型專案又需要維護多個分支,想要避免來回切換的場景。其有以下幾個優點:

  • 單獨 clone 專案相比,節省了硬碟空間,又因為 git worktree 使用 hard link 實現,要遠遠快於 clone

  • 提交可以在同一個專案中共用

  • 可以快速進行並行開發,同一個專案多個分支同時並行演進

git worktree使用非常簡單,掌握3個命令即可:

# 新增一個 worktree。
git worktree add filePath
# 移除一個 worktree
git worktree remove filePath
# 檢視目前所有的 worktree
git worktree list

建立了worktree後,只需要用IDE開啟新增到filePath的專案即可。

5.其它

#本地分支與遠端進行關聯
git branch --set-upstream-to=origin/(要關聯的分支名)

#推播本地新建分支到遠端分支(遠端會自動建立分支)
git push origin newbranch:originbranch

#刪除遠端分支
git push origin --delete (branch_name)

#檢視本地分支關聯的遠端分支
git branch -vv

#分支重新命名
git branch -m oldName newName

#修改當前專案的使用者名稱和郵箱
git config --local user.name 「userName"
git config --local user.email [email protected]

#刪除本地版本庫上那些失效的遠端追蹤分支:
git remote prune origin --dry-run