Git 經常使用命令集

Git 經常使用命令集

我的使用 git的一些總結,一下經常使用命令的互相搭配使用,能很是完美的處理好平常遇到的 99%的狀況(不敢說100%,得留點餘地)。
還有一些使用頻率很是低的指令沒有記錄,至少普通開發者很是不經常使用,之後可能會補充。
話很少說
首先須要先下載 git這個仍是要說一下的

在這裏推薦一個學習git的網頁小遊戲,輸入命令後顯式的展現倉庫變化,用來學習git仍是不錯的
連接:https://learngitbranching.js.org/node


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 圖形化展現合併歷史git

1.2 初始化基本操做

git init 初始化倉庫,默認爲master分支
git add -A 提交所有文件修改到緩存區
git add <具體某個文件路徑+全名> 提交某些文件到緩存區
git commit -m "<註釋>" 提交代碼到本地倉庫,並寫提交註釋
git commit –a -m "<新註釋>" 更改上次提交的註釋github

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 <新分支名> 把基於當前分支新建分支,並切換爲這個分支npm

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 回滾操做

注意,當回滾代碼時, resetrevert均可以使用,下面是兩個指令的區別
reset:真實硬性回滾,目標版本後面的提交記錄所有丟失了
revert:一樣回滾,但實際這個回滾操做,算是一個提交,目標版本後面的提交記錄也所有都有,並且會多一次提交,就是此次 revert

--hard的功能:不加他,文件修改會保留,都會處於add以前的狀態;加上他,文件修改會被刪除,丟失掉app

git <reset/revert> <--hard?> HEAD^ 回退到上次提交
git <reset/revert> <--hard?> <提交記錄> 回退到以前的某次提交
git <reset/revert> <--hard?> <某個分支> 回退到此分支的提交狀態,至關於複製分支過來
git reset <文件完整路徑+完整名>add過的某個文件撤銷到未add的狀態
git resetadd過的全部文件撤銷到未add的狀態
git checkout <文件完整路徑+完整名> 一個尚未add的文件,撤銷修改
git checkout . 尚未add的全部文件,撤銷修改ssh

1.7 遠程庫和分支的連接操做

git remote -v 查看對應的遠程倉庫地址
git clone <遠程倉庫地址連接> 克隆某個遠程庫,默認庫名爲origin
git clone <遠程倉庫地址連接> <庫名> 克隆某個遠程庫,並自定庫名
git remote remove <遠程倉庫名> 和遠程的某個倉庫解除綁定關係
git remote add <遠程倉庫名> <遠程倉庫地址連接> 和某個遠程倉庫創建綁定關係
git remote set-url <遠程倉庫名> <要改成的遠程倉庫地址連接> 修改綁定的遠程庫連接
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 清空全部儲藏中的工做fetch

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爲公鑰,須要打開復制其中的內容,粘貼到須要的git遠程倉庫網站的帳戶設置中(另外一個爲私鑰,切記保管好)

注:一個ssh鑰匙對,在一個git遠程倉庫網站中,只能被一個用戶添加。
若是有另外一個用戶,也想把倉庫共享給這臺設備,再次寫入公鑰,則會失敗。

好比如今需求,就須要一臺設備,能拉取到github中多個帳戶的倉庫,該如何設置?

再次輸入ssh-keygen生成祕鑰對,可是不能一直回車,須要在給祕鑰對命名時,輸入一個新名字,不然會替換原有的。
或者也能夠直接輸入ssh-keygen -f id_new
生成完畢後,進入對應存放ssh鑰匙對的.ssh文件夾中,會發現又多了一對祕鑰,名字分別爲id_newid_new.pub
此時,能夠把新的id_new.pub的內容複製到github中另外一個帳戶的setting中,可是,本地設備須要設置一下。

進入到本地的設備的存放ssh鑰匙對的.ssh文件夾中,新建名爲config的文件,輸入如下內容進行保存:

Host github.com
  HostName github.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/id_rsa
Host new.github.com
  HostName github.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/id_new

咱們知道,在github中使用ssh連接時,連接的格式爲:git@github.com:<用戶名稱>/<項目名稱>.git
此時,有github中的用戶A和用戶B,都有ssh連接給到這臺設備,分別是:
git@github.com:user-A/item-A.git
git@github.com:user-B/item-B.git

則此設備在綁定遠程倉庫的時候,須要在連接上作手腳。
第一條不用動,第二個須要參照配置文件的Host進行修改,兩條連接分別改成:
git@github.com:user-A/item-A.git(沒有變化)
git@new.github.com:user-B/item-B.git
此時,設備能夠成功綁定這兩個帳戶的倉庫。

依次類推,設備綁定多個帳戶,再也不是問題,關鍵就是配置config文件,可以對應起來便可。

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,便可看到,可編輯更改

相關文章
相關標籤/搜索