Git基本操作指南

冰洋發表於2017-12-14

Git算是很有用的一個技能了吧,一直以來也沒有梳理一些基本的操作,左右閒著也沒有什麼事情,那麼就整理整理自己的心得以及看的各種帖子,主要是各種帖子,哈哈哈哈。

** 工作流 **

Git最核心的一個概念就是工作流。工作區(Workspace)是電腦中實際的目錄;暫存區(Index)像個快取區域,臨時儲存你的改動;最後是版本庫(Repository),分為本地倉庫和遠端倉庫。下圖真是一圖勝千言。

** Git基本操作 **

下載安裝

有兩種下載的方式:國內映象 或 官網

在安裝之後需要進行Git 設定,設定 commit 的使用者和郵箱

git bash 輸入

git config user.name "xx" #設定 commit 的使用者

git config user.email "xx@xx.com" #設定 commit 的郵箱

git commit --amend --author "Jark Wu imjark@gmail.com" #修改上次提交的使用者資訊

git config format.pretty oneline #顯示歷史記錄時,每個提交的資訊只顯示一行

建立本地版本庫

選擇一個合適的地方,建立一個空目錄

$ mkdir <資料夾名稱>

通過git init命令把這個目錄變成Git可以管理的倉庫

$ git init

會返回結果如下

Initialized empty Git repository in /Users/michael/learngit/.git/

檔案新增至本地版本庫

把檔案新增至版本庫需要兩步:先把檔案新增至暫存區,在把檔案新增至本地倉庫

用命令git add告訴Git,把檔案新增到倉庫

$ git add readme.txt

用命令git commit告訴Git,把檔案提交到倉庫

$ git commit -m "wrote a readme file"

返回結果如下

[master (root-commit) cb926e7] wrote a readme file

1 file changed, 2 insertions(+)

create mode 100644 readme.txt

git commit命令

-m後面輸入的是本次提交的說明,可以輸入任意內容,當然最好是有意義的,這樣你就能從歷史記錄裡方便地找到改動記錄

** 版本庫歷史資訊掌控 **

檢視歷史

git log --pretty=oneline filename #一行顯示

git log -p -2 #顯示最近2次提交內容的差異

git show cb926e7 #檢視某次修改

版本回退

git reset --hard HEAD^ #回退到上一個版本

git reset --hard cb926e7 #回退到具體某個版

git reflog #檢視命令歷史,常用於幫助找回丟失掉的commit

用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,HEAD~100就是上100個版本。

管理修改

git status #檢視工作區、暫存區的狀態

git checkout -- #丟棄工作區上某個檔案的修改

git reset HEAD #丟棄暫存區上某個檔案的修改,重新放回工作區

檢視差異

git diff #檢視未暫存的檔案更新

git diff --cached #檢視已暫存檔案的更新

git diff HEAD -- readme.txt #檢視工作區和版本庫裡面最新版本的區別

git diff <source_branch> <target_branch> #在合併改動之前,預覽兩個分支的差異

使用內建的圖形化git:gitk,可以更方便清晰地檢視差異。當然 Github 客戶端也不錯。

刪除檔案

git rm #直接刪除檔案

git rm --cached #刪除檔案暫存狀態

儲存和恢復

git stash #儲存當前工作

git stash list #檢視儲存的工作現場

git stash apply #恢復工作現場,stash內容並不刪除

git stash pop #恢復工作現場,並刪除stash內容

遠端倉庫

準備工作:SSH加密設定,遠端倉庫關聯

** SSH加密設定 **

建立SSH Key

$ ssh-keygen -t rsa -C "youremail@example.com"

id_rsa是私鑰,不能洩露出去

id_rsa.pub是公鑰,可以放心地告訴任何人

登陸GitHub,開啟“Account settings”,“SSH Keys”頁面

然後,點“Add SSH Key”,填上任意Title,在Key文字框裡貼上id_rsa.pub檔案的內容

為什麼GitHub需要SSH Key呢?

因為GitHub需要識別出你推送的提交確實是你推送的,而不是別人冒充的,而Git支援SSH協議,所以,GitHub只要知道了你的公鑰,就可以確認只有你自己才能推送。

當然,GitHub允許你新增多個Key。假定你有若干電腦,你一會兒在公司提交,一會兒在家裡提交,只要把每臺電腦的Key都新增到GitHub,就可以在每臺電腦上往GitHub推送了。

最後友情提示,在GitHub上免費託管的Git倉庫,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感資訊放進去。

遠端倉庫關聯

Create a new repod:learngit

本地關聯

$ git remote add origin git@github.com:bingyanglu/learngit.git

本地庫的所有內容推送到遠端庫上

$ git push -u origin master

新增遠端倉庫

git remote add origin git@server-name:path/repo-name.git #新增一個遠端庫

檢視遠端倉庫

git remote #要檢視遠端庫的資訊

git remote -v #顯示更詳細的資訊

推送分支

git push origin master #推送到遠端master分支

抓取分支

git clone git@server-name:path/repo-name.git #克隆遠端倉庫到本地(能看到master分支)

git checkout -b dev origin/dev #建立遠端origin的dev分支到本地,並命名為dev

git checkout origin/dev --track #與上面效果一樣

git pull origin master #從遠端分支進行更新

git fetch origin master #獲取遠端分支上的資料

抓取GitHub上某個pull request到本地

git fetch origin pull/ID/head:BRANCHNAME

git checkout BRANCHNAME

$ git branch --set-upstream branch-name origin/branch-name,可以建立起本地分支和遠端分支的關聯,之後可以直接git pull從遠端抓取分支

另外,git pull = git fetch + merge to local

刪除遠端分支

$ git push origin --delete bugfix

To https://github.com/wuchong/jacman

-[deleted] bugfix

或者直接push一個空分支

$ git push origin :bugfix

To https://github.com/wuchong/jacman

-[deleted] bugfix

更新遠端分支資訊

專案往前推進的過程中,遠端倉庫上經常會增加一些分支、刪除一些分支。 所以有時需要與遠端同步下分支資訊。

git fetch -p

-p就是修剪的意思。它在fetch之後刪除掉沒有與遠端分支對應的本地分支,並且同步一些遠端新建立的分支和tag。

** 分支管理 **

建立分支

git branch develop #只建立分支

git checkout -b master develop #建立並切換到 develop 分支

合併分支

git checkout master #切換到主分支

git merge --no-ff develop #把 develop 合併到 master 分支,no-ff 選項的作用是保留原分支記錄

git branch -d develop #刪除 develop 分支

** 標籤 **

顯示標籤

git tag #列出現有標籤

git show #顯示標籤資訊

建立標籤

git tag v0.1 #新建標籤,預設位 HEAD

git tag v0.1 cb926e7 #對指定的 commit id 打標籤

git tag -a v0.1 -m 'version 0.1 released' #新建帶註釋標籤

操作標籤

git checkout #切換到標籤

git push origin #推送分支到源上

git push origin --tags #一次性推送全部尚未推送到遠端的本地標籤

git tag -d #刪除標籤

git push origin :refs/tags/ #刪除遠端標籤

相關文章