github常用指令總結

zhunny發表於2019-03-12

  話不多說,我先上一張圖,這張圖可以說是讓我茅塞頓開,雖然圖是我自己畫的,但github的整個管理模式和指令怎麼用,卻另有人指導,我就負責消化總結。

github常用指令總結

第一步 建立遠端倉庫和本地倉庫

  我們想使用Git進行版本管理,必須先初始化倉庫。初始化一個本地的git庫,以及在GitHub上新建一個遠端倉庫。為防止混淆,我們一般把本地倉庫和遠端倉庫的名字保持一致。
  初始化一個本地倉庫,假設你的專案名稱叫my-project:

$ mkdir my-project
$ cd my-project
$ git init
複製程式碼

  在GitHub上建立一個遠端倉庫,設定它的名稱也為my-project,不要勾選 Initialize this repository with a README 選項,因為一旦勾選,就會與建立的本地倉庫失去整合性:

github常用指令總結

第二步 建立遠端庫和本地庫的聯絡

  有兩種方式,第一種情況是你先建立了一個專案,並且想用Git進行版本管理。你可以用git remote add命令將遠端倉庫my-project設定為本地倉庫my-project的遠端倉庫,git push就可以將本地庫中的內容推送至遠端倉庫了:

 $ git remote add origin git@github.com:zhunnyWang/my-project.git
 $ git push -u origin master
複製程式碼

  第二種情況是你的專案做大了,你邀請其他幾個人和你一起開發,你們要一起用Git來進行版本管理。他們其他人就先要從遠端倉庫中把專案clone到本地,在本地倉庫中開發自己的那一個部分。

$ git clone git@github.com:zhunnyWang/my-project.git 
$ cd my-project
複製程式碼

第三步 更新本地倉庫,同步遠端倉庫

  現在你建立了本地倉庫與遠端倉庫的聯絡,並已經在本地專案資料夾下面寫了一系列的檔案。你打算把它推到遠端倉庫上去,你就需要進行下面一頓猛操作了:   首先你要git add把本地檔案加入一個臨時的快取區,可以通過git status檢視快取區中的內容。

$ git add . //把所有修改過的檔案都提交
$ git add 檔名.字尾 //指定提交某個檔案
$ git status
複製程式碼

  如果你確認快取區中的檔案你都想要將其上傳,接下來你就需要將快取區中的內容git commit提交到本地倉庫中。提交完成之後,可以通過git log來檢視提交記錄。記錄會為每一次commit都生成一個hash值作為標識。當你把暫存區中檔案全部commit到本地Git庫,且你又沒有修改檔案,那麼此時暫存區就是乾淨的。

$ git commit -m "First commit"
複製程式碼

  你的本地庫更新了,如果你確定這是你的一個版本,你就可以把它push到遠端倉庫了。

$ git push -u origin master
複製程式碼

第四步 回溯歷史版本

  如果開發過程中你發現,某次更新可能有問題,你想要把它回滾到上一個版本,這時涉及到的回滾有四種情況:

  1. 你的專案中內容的回滾(工作區Working Directory)

  當你修改某個檔案已經修改了很多次了,但發現業務邏輯可能寫的有問題,這個時候你想回到沒有修改本次內容之前。總不能讓你一直Ctrl+Z吧。於是Git提供給你一個命令git checkout,你可以將你的檔案內容回溯到上一次你commit這個檔案時它的內容。

$ git checkout -- file1  //回滾單個檔案
$ git checkout -- //全部回滾
複製程式碼
  1. 快取區中的內容回滾(暫存區stage)

  當你用git add命令向快取區加入了一系列檔案準備提交到Git,但這時候你發現有個檔案你並不想把它更新到Git庫,這個時候就需要用命令git reset回溯暫存區,一旦檔案重新回到工作樹,回溯就用第四條規則了。

$ git reset HEAD file1
$ git reset HEAD //全部回滾
複製程式碼
  1. 本地git庫中的內容回滾(版本庫repository)

  當你已經commit提交過了一系列版本,這是你發現最新的一個版本有問題,需要回溯到上一個提交的版本。你可能會用到git log命令檢視每一次commit的commitID。在Git中,HEAD表示當前版本,HEAD^就是上一個版本,HEAD^^就是上上一個版本。git reflog檢視命令歷史。

$ git reset --hard HEAD^ //回溯到上一個版本,從未來回到過去。
$ git reset --hard commitID //回溯到某一個版本,對應它的commitID,比如你回溯到上一個版本之後後悔了,你就可以拿著之前git log時得到的未來那個版本的commitID,從過去回到未來。
複製程式碼
  1. 遠端git庫中的內容回滾

  這是我們最不想看到的情況,你把錯誤帶到了公共開發的分支上,你要是不及時改正,那麼開發的每個人可能都會深受其害。

git revert
複製程式碼

第五步 分支

  分支就是一個指標,在一條提交的時間線上,可能有多個分支,例如有master和branch兩個分支,Git鼓勵使用分支,這樣的做法更加安全:

github常用指令總結

檢視分支:git branch
建立分支:git branch <name>
切換分支:git checkout <name>
建立+切換分支:git checkout -b <name>
合併某分支到當前分支:git merge <name>
刪除分支:git branch -d <name>
檢視合併分支圖:git log --graph

多人協作

  1. 首先,可以試圖用git push origin <branch-name>推送自己的修改;
  2. 如果推送失敗,則因為遠端分支比你的本地更新,需要先用git pull試圖合併(用git pull把最新的提交從origin/dev抓下來,git fetch + git merge == git pull);
  3. 如果合併有衝突,則解決衝突,並在本地提交;
  4. 沒有衝突或者解決掉衝突後,再用git push origin <branch-name>推送就能成功!
  5. 如果git pull提示no tracking information,則說明本地分支和遠端分支的連結關係沒有建立,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。

多人協作參考了廖雪峰老師的Git教程:www.liaoxuefeng.com/wiki/001373…