相信大家都用上了國產化系統,在Linux系統上,沒有比較好用的Git Gui客戶端確實造成提交和修改效率低下。git命令比較多,很多時候只熟記常用的幾個,但遇到問題時候都是用到不熟悉的命令,那么我在這里總結一下Git的各個命令用途和用法,希望你看完這篇文章后可以提高在Linux系統上提交和修改git的效率。
git init - 初始化一個Git倉庫
# 在當前目錄初始化一個Git倉庫
git init
git add - 添加文件到暫存區
# 添加filename文件到暫存區
git add filename
git commit -m "message" - 提交更新,帶提交注釋
# 提交更新,注釋為"完成首頁UI"
git commit -m "完成首頁UI"
git status - 查看倉庫當前狀態
# 查看新增、修改、刪除等變更情況
git status
# 查看具體文件修改的內容差異
git status -v //顯示工作區和暫存區文件的變更詳情
# 顯示忽略文件的概覽
git status --ignored //顯示被忽略文件的概覽
# 顯示未跟蹤文件概覽
git status --untracked-files=all //顯示所有未跟蹤文件的概覽
# 顯示簡潔版本狀態
git status -s //以簡潔方式顯示工作區和暫存區文件的狀態
git diff - 比較工作目錄和暫存區的不同
# 比較工作區和暫存區差異
git diff // 比較工作區和暫存區文件的差異
# 比較兩次提交之間的差異
git diff commit1 commit2 // 比較commit1和commit2兩次提交之間的差異
# 比較某次提交和工作區的差異
git diff commit // 比較給定提交和工作區的差異
# 比較兩個分支
git diff branch1 branch2 // 比較branch1和branch2分支之間的差異
# 僅顯示統計信息,不顯示文件內容差異
git diff --stat // 僅顯示統計信息,而不顯示文件內容的DIFF
git log - 查看提交日志
# 按提交次數限制顯示日志
git log -n 5 // 顯示最近5次的提交日志
# 按日期范圍過濾日志
git log --since=2022-06-01 --until=2022-06-30 // 顯示2022年6月1日到6月30日期范圍的提交日志
# 按作者過濾日志
git log --author="張三" // 只顯示張三的提交日志
# 按關鍵詞過濾日志
git log -S"函數名" // 顯示修改過"函數名"函數的提交日志
# 顯示簡略的統計信息
git log --stat //顯示每次提交的簡略修改統計信息
git reset --hard commit_id - 回退到指定commit_id版本
# 回退到a5f4a0d版本
git reset --hard a5f4a0d
git checkout branchname - 切換分支
# 切換到develop分支
git checkout develop
git merge branchname - 合并分支到當前分支
# 將feature/login分支合并到當前分支
git merge feature/login
git branch - 查看所有分支
# 列出所有本地分支
git branch //列出所有本地分支
# 列出所有遠程分支
git branch -r //列出所有遠程分支
# 基于當前分支創建新的分支
git branch new-feature //基于當前分支創建new-feature分支
# 基于指定提交創建分支
git branch new-branch HEAD~5 //基于HEAD的第5個父提交創建分支
# 重命名當前分支
git branch -m new-name //重命名當前分支為new-name
git remote add origin url - 關聯遠程倉庫
# 關聯遠程倉庫origin
git remote add origin //github.com/user/repo.git
# 查看當前遠程倉庫
git remote -v
# 修改遠程倉庫的URL
git remote set-url origin //github.com/user/newrepo.git
# 添加新的遠程倉庫upstream
git remote add upstream //github.com/user/forkedrepo.git
# 刪除遠程倉庫origin
git remote rm origin
git push origin master - 推送master分支到遠程倉庫
# 推送本地master分支到origin遠程倉庫
git push origin master
git clone url - 克隆遠程倉庫
# 克隆遠程倉庫到本地
git clone //github.com/user/repo.git
# 克隆指定分支
git clone -b branch //github.com/user/repo.git
# 克隆指定標簽
git clone --branch tag v1.0 //github.com/user/repo.git
# 淺克隆倉庫,不包括所有提交記錄
git clone --depth 1 //github.com/user/repo.git
# 鏡像推送克隆倉庫
git clone --mirror //github.com/user/repo.git
git pull - 拉取遠程倉庫最新版本到本地
# 拉取遠程master分支到本地當前分支
git pull origin master
# 拉取標簽v1.0的代碼到當前分支
git pull origin v1.0
# 反向合并遠程分支到當前分支
git pull --rebase origin feature
# 拉取并自動合并或衍合所有遠程追蹤分支
git pull --all
# 拉取并自動處理沖突的合并
git pull -Xtheirs origin
git stash - 暫存當前工作目錄的改動
# 暫存當前工作目錄的改動
git stash
# 查看stash列表
git stash list // 列出所有stash的改動記錄
# 恢復指定的stash內容
git stash apply stash@{2} // 恢復編號為2的stash內容
# 刪除指定的stash
git stash drop stash@{3} // 刪除編號為3的stash
git stash pop - 恢復暫存的改動
# 恢復最近一次stash
git stash pop
# 恢復指定的stash
git stash pop stash@{2}
# 恢復并刪除此stash
git stash pop --index
# 恢復stash時保留壓入的stash
git stash apply stash@{1}
# 刪除最后一個stash
git stash drop
git rebase - 變基操作,合并分支時保持線性提交歷史
# 將當前分支rebase到master
git rebase master
# 交互式rebase編輯歷史提交
git rebase -i HEAD~5
# 跳過rebase中的某個提交
git rebase --skip
# 中止當前rebase過程
git rebase --abort
# 處理rebase過程中的沖突后繼續
git rebase --continue
git tag - 添加標簽
# 給最近一次提交加標簽
git tag v1.0
# 給指定提交的hash加標簽
git tag v1.0 9fceb02
# 創建帶注釋的標簽
git tag -a v1.0 -m "version 1.0"
# 查看所有標簽
git tag
# 查看標簽詳細信息
git show v1.0
git fetch - 獲取遠程倉庫最新版本到本地
# 從遠程獲取最新版本到本地
git fetch origin
# 獲取遠程分支到本地
git fetch origin dev
# 獲取遠程倉庫的所有分支
git fetch --all
# 獲取遠程倉庫的標簽
git fetch --tags
# 獲取遠程上游倉庫分支
git fetch upstream
git cherry-pick commit_id - 揀選合并某個指定的提交到當前分支
# 合并提交號為a7683de的提交到當前分支
git cherry-pick a7683de
# 合并一個范圍的提交
git cherry-pick 160e1260..160e1279
# 合并并自動處理沖突
git cherry-pick -X theirs 160e1279
# 放棄正在進行的cherry-pick
git cherry-pick --abort
# 繼續處理沖突后的cherry-pick
git cherry-pick --continue
git bisect - 通過二分查找定位引入bug的提交
# 開始bisect過程查找引入bug的提交
git bisect start
# 標記當前提交為好的提交
git bisect good [commit]
# 標記當前提交為壞的提交
git bisect bad [commit]
# 跳過對某次提交的測試
git bisect skip
# 結束bisect并返回到開始檢出的地方
git bisect reset
git reflog - 查看所有分支頂端的操作記錄
# 查看所有分支HEAD指針運動的操作歷史
git reflog
# 查看某一分支的引用日志
git reflog master // 顯示master分支HEAD的歷史記錄
# 查看最近5條引用日志
git reflog -5 // 顯示最近5條引用日志記錄
# 查找刪除分支的提交號
git reflog --all | grep 'delete branch' // 查找刪除分支的提交記錄
# 查看reset命令的提交號
git reflog --all | grep 'reset' // 查找reset命令操作的提交記錄
git rm --cached filename - 從暫存區移除文件但保留在工作目錄
# 移除config.txt的跟蹤但不刪除文件
git rm --cached config.txt
# 從版本控制中刪除文件
git rm filename
# 遞歸刪除整個目錄
git rm -r folder/
# 從暫存區刪除但保留文件在工作區
git rm --cached filename
# 強制刪除文件或目錄
git rm -f filename
# 刪除glob模式匹配的文件
git rm log/*.log
git revert commit_id - 撤銷指定的提交
# 撤銷指定的提交
git revert b434dc7
# 撤銷最新的一次提交
git revert HEAD
# 撤銷指定的提交范圍
git revert HEAD~3..HEAD
# 在revert時創建新的提交
git revert -n b434dc7
# 放棄進行中的revert操作
git revert --abort
git archive - 將git倉庫打包成zip或tar文件
# 導出指定分支的整個倉庫為zip文件
git archive --format=zip HEAD -o repo.zip
# 導出某個目錄為tar文件
git archive --output=folder.tar HEAD:folder
# 導出指定commit區間的diff為tar文件
git archive --format=tar commit1..commit2 > diff.tar
# 導出最后一次提交的文件快照為zip文件
git archive @ -o snapshot.zip HEAD
# 導出倉庫打包時過濾指定文件
git archive --format=zip HEAD --exclude="*.log"