Git 常用命令集
個人使用git
的一些總結,一下常用命令的互相搭配使用,能非常完美的處理好日常遇到的99%
的情況(不敢說100%,得留點餘地)。
還有一些使用頻率非常低的指令沒有記錄,至少普通開發者非常不常用,以後可能會補充。
話不多說
首先需要先下載git
這個還是要說一下的
1. 常用命令
1.1 最常用/版本對比/其他
git status
查看當前分支狀態 git reflog
查看每一次的命令,都做過什麼 git log
查看此分支完整的提交記錄,回車繼續看,q
停止 git log --oneline
查看此分支簡略的提交記錄,只展示提交號和提交信息 git show
查看最近一次提交的具體代碼變化 git show <提交ID>
查看某次提交的具體代碼變化 git diff
查看當前代碼add
後,會add
哪些內容 git diff --staged
查看現在commit
提交後,會提交哪些內容 git diff HEAD
查看當前代碼add
並提交後,會提交哪些內容 git log --oneline --graph
圖形化展示合併歷史
1.2 初始化基本操作
git init
初始化倉庫,默認爲mast
分支 git add -A
提交全部文件修改到緩存區 git add <具體某個文件路徑+全名>
提交某些文件到緩存區 git commit -m "<註釋>"
提交代碼到本地倉庫,並寫提交註釋 git commit –a -m "<新註釋>"
更改上次提交的註釋
1.3 分支操作
git branch
查看本地所有分支 git branch -r
查看遠程所有分支 git branch -a
查看本地和遠程所有分支 git merge <分支名>
合併分支 git merge --abort
合併分支出現衝突時,取消合併,一切回到合併前的狀態 git branch <新分支名>
基於當前分支,新建一個分支 git checkout --orphan <新分支名>
新建一個空分支(會保留之前分支的所有文件) git branch -D <分支名>
刪除本地某個分支 git push <遠程庫名> :<分支名>
刪除遠程某個分支 git branch <新分支名稱> <提交ID>
從提交歷史恢復某個刪掉的某個分支 git branch -m <原分支名> <新分支名>
分支更名 git checkout <分支名>
切換到本地某個分支 git checkout <遠程庫名>/<分支名>
切換到線上某個分支 git checkout -b <新分支名>
把基於當前分支新建分支,並切換爲這個分支
1.4 推拉操作(push和pull)
git pull <遠程倉庫名> <遠程分支名>
拉取遠程倉庫的分支與本地當前分支合併 git pull <遠程倉庫名> <遠程分支名>:<本地分支名>
拉取遠程倉庫的分支與本地某個分支合併 git push <遠程倉庫名> <本地分支名>
推送本地某個分支到遠程與其對應的分支上,遠程沒有則會給遠程庫新建分支 git push <遠程倉庫名> <本地分支名>:<遠程分支名>
推送本地分支到遠程某個分支 git push <遠程倉庫名> :<遠程分支名>
刪除遠程某個分支 git push -f <同上的命令>
強制提交,覆蓋線上 git fetch
獲取線上最新版信息記錄,不合並,用法和pull類似(一個特殊的操作,比如多人開發分支,其他人提交後,自己看分支的時候,可能還知不道線上的分支已經比自己的新了,需要這個指令,來獲取一下線上的最新版本,會拉取,但不會合並,存在本地倉庫中)
1.5 查看具體文件版本區別(git diff)
git diff <文件名>
對比最近提交,和近近次提交的區別,不加文件名,則爲整體對比 git diff HEAD^ -- <文件名>
同上 git diff HEAD~<一個數字> -- <文件名>
上次提交和前第幾次提交作對比 git diff <提交ID> <文件名>
上次提交和某次提交作對比 git diff <文件名>
工作區與暫存區比較 git diff HEAD <文件名>
工作區與最近提交比較 git diff <本地分支名> <文件名>
當前分支的文件與其他分支的文件進行比較
1.6 回滾操作
注意,當回滾代碼時,reset
和revert
都可以使用,下面是兩個指令的區別reset
:真實硬性回滾,目標版本後面的提交記錄全部丟失了revert
:同樣回滾,但實際這個回滾操作,算是一個提交,目標版本後面的提交記錄也全部都有,而且會多一次提交,就是這次revert
--hard
的功能:不加他,文件修改會保留,都會處於add之前的狀態;加上他,文件修改會被刪除,丟失掉
git <reset/revert> <--hard?> HEAD^
回退到上次提交 git <reset/revert> <--hard?> <提交記錄>
回退到之前的某次提交 git <reset/revert> <--hard?> <某個分支>
回退到此分支的提交狀態,相當於複製分支過來 git reset <文件完整路徑+完整名>
把add
過的某個文件撤銷到未add
的狀態 git reset
把add
過的所有文件撤銷到未add
的狀態 git checkout <文件完整路徑+完整名>
一個還沒有add
的文件,撤銷修改 git checkout .
還沒有add
的所有文件,撤銷修改
1.7 遠程庫和分支的鏈接操作
git remote -v
查看對應的遠程倉庫地址 git clone <遠程倉庫地址鏈接>
克隆某個遠程庫,默認庫名爲origin
git clone <遠程倉庫地址鏈接> <庫名>
克隆某個遠程庫,並自定庫名 git remote remove <遠程倉庫名>
和遠程的某個倉庫解除綁定關係 git remote add <遠程倉庫名> <遠程倉庫地址鏈接>
和某個遠程倉庫建立綁定關係 git push --set-upstream <遠程倉庫名> <遠程分支名>
當前分支和遠程某個分支建立綁定關係
1.8 儲藏操作(stash)
經常有這樣的事情發生,當你正在進行項目中某一部分的工作,裏面的東西處於一個比較雜亂的狀態。
而你想轉到其他分支上進行一些工作。
問題是,你不想提交進行了一半的工作,否則以後你無法回到這個工作點。
解決這個問題的辦法就是git stash命令。
git stash save <註釋信息>
當前分支提交到儲藏,插到儲藏序列的最前面(不包括新建文件) git stash save -u <註釋信息>
同上,會包括新建文件,功能更強大 git stash list
查看所有儲藏中的工作 git stash drop <儲藏的名稱>
刪除對應的某個儲藏 git stash pop
取出儲藏中最後存入的工作狀態進行恢復,會刪除儲藏 git stash pop <儲藏對應的數字>
取出儲藏中對應的工作狀態進行恢復,會刪除儲藏 git stash apply
取出儲藏中最後存入的工作狀態進行恢復,注意,不會刪除儲藏 git stash apply <儲藏的名稱>
取出儲藏中對應的工作狀態進行恢復,注意,不會刪除儲藏 git stash branch <新分支名> <儲藏的名稱>
從儲藏中新建分支,會刪除儲藏 git stash clear
清空所有儲藏中的工作
1.9 標籤操作(tag)
tag
是什麼,雖然整個開發過程,每個提交都對應一個提交ID,回滾也比較方便,但總有一些重大意義的提交,比如從v0.91升級到了v1.0,這個v1.0是必須要單獨摘出來保存的,否則萬一出現回滾事故,導致提交記錄丟失呢?雖然可以單獨新建分支保存,但分支的功能並不是用來做這個的。冗餘的分支在開發時也容易產生誤操作。
所以
tag
的用處就來了,他可以把某次提交後的項目,整個單獨複製拎出來,命名爲一個tag(可以以項目版本或打tag的時間來命名),可以寫註釋,存在tag列表中,與分支隔離開,除非專門命令操作,否則只要項目存在,他們就不會受到影響。同時,可以使用tag快速回滾項目、基於tag新建分支等,在項目整體的管理上非常方便。
git tag
列出本倉庫中所有tag列表 git tag <tag名>'
基於最近的一次提交打tag(輕量tag,不推薦) git tag -a <tag名> -m '<此tag的註釋>'
基於最近的一次提交打tag git tag -a <tag名> <提交ID> -m '<此tag的註釋>'
基於某次提交打tag git show <tag名>
查看此tag的tag信息 git tag -d <tag名>
刪除本地某個tag git push origin :refs/tags/<tag名>
刪除遠程倉庫中的tag git push <遠程倉庫名> <tag名>'
推送某個tag至某個遠程庫 git push <遠程倉庫名> --tags'
推送所有tag至某個遠程庫 git checkout -b <新分支名> <tag名>'
基於某個tag新建分支
2. .gitignore
文件
在使用Git的過程中,有的文件比如日誌、臨時文件、編譯的中間文件等不要提交到代碼倉庫,這時就要設置相應的忽略規則,來忽略這些文件的提交。
沒錯就是.gitignore
文件了。
此文件需要放在.git
(默認是隱藏文件,是git的本地倉庫)同一目錄下
寫法如下:
node_modules/
dist/
*.map
npm-debug.log*
yarn-debug.log*
yarn-error.log*
這樣,當git add
的時候,上面定義忽略的那些文件,就會被git忽略,發生了變化git也不會管。
然而有時候,是會出現意外的。
比如,git已經提交過了,這是後突然說,這裏面有個文件需要被忽略,然後我把這個文件寫到了.gitignore
文件中。。。無效!這個文件仍然沒有被忽略!
這是就需要如下命令,來刪除此文件並忽略
git rm -r --cached <文件路徑+文件全名>
在git庫中刪除文件並停止追蹤,但實際文件還保留,只是忽略掉。
由此,方可。
3. 生成SSH
公鑰
綁定一個遠程倉庫,有兩種方式:
- 使用http鏈接的方式
- 使用ssh加密鏈接的方式
如果遠程倉庫爲公開倉庫,則兩者在使用上,區別不大;
但如果是私密倉庫,則http方式,需要輸入用戶名和密碼登錄後,纔可建立聯繫,但這樣一來,需要把私密倉庫的賬號和密碼暴露,即使添加了項目團隊成員,如果成員的賬號密碼暴露,任何人在任何設備上,登錄賬號密碼,至少都能對項目進行拉取操作,所以就有了下面更合適的方式---ssh
。
ssh
的話,則只需要本地設備,輸入一條git
指令,生成一對公鑰和私鑰,然後把公鑰的內容,複製添加到遠程庫的設置中,讓遠程庫認識此設備,就想當於用戶填寫了賬號和密碼,好處是,這種方法在遠程庫的添加上,只認設備不認賬戶,這樣只用保證設備是安全的,倉庫就是安全的。
下面爲本地設備生成ssh
輸入ssh-keygen
來生成ssh
window默認存放在C盤/用戶/<用戶名稱>/.ssh
文件夾中
Mac默認存放在硬盤/用戶/<用戶名稱>/.ssh
文件夾中
其中兩個文件,id_rsa.pub
爲公鑰,需要打開復制其中的內容,粘貼到需要的網站中(另一個爲私鑰,切記保管好)
4. 設置用戶名、郵箱、登錄賬戶
git config user.name
查看設置的用戶名 git config user.email
查看設置的用戶郵箱 git config --global user.name <用戶名>
設置用戶名 git config --global user.email <郵箱>
設置用戶郵箱
修改用戶登錄信息
- window
控制面板 -> 用戶賬戶 -> 管理 Windows 憑據
,即可看到普通憑據中有git的賬戶信息,可編輯更改
- Mac
鑰匙串訪問.app -> 右上角搜索git
,即可看到,可編輯更改