1. 程式人生 > 其它 >Git 只會pull、push ?

Git 只會pull、push ?

Git作為程式碼管理工具,是我們開發工程師的必備技能。但大多數工程師只會基本的儲存、拉取、推送,遇到一些commit管理的問題就束手無策,或者用一些不優雅的方式解決。
這裡分享一些常用和不常用的命令,幫助大家解決在實際開發場景中遇到的問題。希望對你有幫助,歡迎大家翻閱~

目錄

Git 最小配置

某賬號下所有的 Git 倉庫都有效
git config --global user.name '您的名稱'
git config --global user.email '您的Email'
只對當前 Git 倉庫有效
git config --local user.name '您的名稱'
git config --local user.email '您的Email'

檢視 Git 的配置

檢視 global 型別的配置項
git config --global --list

檢視只作用於當前倉庫的配置項

git config --local --list

清除 Git 的配置

清除 global 型別的配置項
git config --unset --global 某個配置項
清除某個倉庫的配置項
git config --unset --local 某個配置項

本地基本操作

檢視變更情況
git status
檢視當前工作在哪個分支上
git branch -v
切換到指定分支
git checkout 指定分支名
把當前目錄及其子目錄下所有的變更都加入到暫存區
git add .
把倉庫內所有變更都加入到暫存區
git add -A
把指定檔案新增到暫存區
git add 檔案1 檔案2 檔案3
建立正式的 commit
git commit
比較某檔案工作區和暫存區的差異
git diff 某檔案
比較某檔案暫存區和 HEAD 的差異
git diff --cached 某檔案
比較某檔案工作區和 HEAD 的差異
git diff HEAD 某檔案
比較工作區和暫存區的所有差異
git diff
比較暫存區和 HEAD 的所有差異
git diff --cached
把工作區指定檔案恢復成和暫存區一樣
git checkout 檔案1 檔案2 檔案3
把暫存區指定檔案恢復成和 HEAD 一樣
git reset 檔案1 檔案2 檔案3
把暫存區和工作區所有檔案恢復成和 HEAD 一樣
git reset --hard
用 difftool 比較任意兩個 commit 的差異
git difftool 提交A 提交B
檢視哪些檔案沒被 Git 管控
git ls-files --others

加塞臨時任務的處理

把未處理完的變更先儲存到 stash 中
git stash
臨時任務處理完後繼續之前未完的工作
git stash pop
或者
git stash apply
pop 不保留 stash, apply 保留 stash
檢視所有 stash
git stash list
取回某次 stash 的變更
git stash pop stash@{數字n}

修改個人分支的歷史

修改最後一次 commit
1) 在工作區修改檔案
2) git add .
3) git commit --amend
修改中間的 commit ( 代號X )
1) git rebase -i X前面一個 commit 的 id
2) 在工作區修改檔案
3) git add .
4) git rebase --continue
後續可能需要處理衝突,直到 rebase 結束

檢視變更的歷史

當前分支各個 commit 用一行顯示
git log --oneline
顯示就近的 n 個 commit
git log --n
用圖示顯示所有分支的歷史
git log --oneline --graph --all
檢視涉及到某檔案變更的所有 commit
git log 某檔案
某檔案各行最後修改對應的 commit 以及作者
git blame 某檔案

分支與標籤

基於當前分支建立新分支
git branch 新分支
基於指定分支建立新分支
git branch 新分支 已有分支
基於某個 commit 建立分支
git branch 新分支 某個commit的id
建立分支並切換到該分支
git checkout -b 新分支
列出本地分支
git branch -v
列出本地和遠端分支
git branch -av
列出遠端所有分支
git branch -rv
?列出名稱符合某樣式的遠端分支
git branch -rv -l '某樣式'
安全刪除本地某分支
git branch -d 擬刪除分支
強行刪除本地某分支
git branch -D 擬刪除分支
刪除已合併到 master 分支的所有本地分支
git branch --merged master | grep -v '^\*\| master' | xargs -n 1 git branch -d 
刪除遠端 origin 已不存在的所有本地分支
git remote prune origin
給 commit 打上標籤
git tag 標籤名 commit的id

兩分支之間的整合

把A分支合入到當前分支,且為 merge 建立 commit
git merge A分支
把A分支合入到B分支,且為 merge 建立 commit
git merge A分支 B分支
把當前分支基於B分支做 rebase,以便把B分支合入到當前分支
git rebase B分支
把A分支基於B分支做 rebase,以便把B分支合入到A分支
git rebase B分支 A分支
用 mergetool 解決衝突
git mergetool

和遠端的互動

列出所有的 remote
git remote -v
增加 remote
git remote add url地址
刪除 remote
git remote remove remote的名稱
改變 remote 的 name
git remote rename 舊名稱 新名稱
把遠端所有分支和標籤的變更都拉到本地
git fetch remote
把遠端分支的變更拉到本地,且 merge 到本地分支
git pull remote名稱 分支名
把本地分支 push 到遠端
git push remote名稱 分支名
刪除遠端分支
git push remote --delete 遠端分支名或者git push remote :遠端分支名
向遠端提交指定的標籤
git push remote 標籤名
向遠端提交所有標籤
git push remote --tags

文件&&參考

https://git-scm.com/book/zh/v2

https://zhuanlan.zhihu.com/p/203097386