常用Git命令手冊


常用Git命令手冊

此文只是對Git有一定基礎的人當記憶使用,比較簡略,初級學員強烈推薦廖雪峰老師的Git系列教程,通俗易懂,戳此處即可開始學習

1.安裝Git

  • Linux
sudo apt-get install git
  • Window:到Git官網下載安裝:https://git-scm.com/downloads

2.配置全局用戶Name和E-mail

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

3.初始化倉庫

git init

4.添加文件到Git倉庫

git add <file>

提示:可反復多次使用,添加多個文件;

5.提交添加的文件到Git倉庫

git commit

然后會彈出一個Vim編輯器輸入本次提交的內容;

或者

git commit -m "提交說明"

6.查看倉庫當前的狀態

git status

7.比較當前文件的修改

$ git diff <file>

8.查看歷史提交記錄

git log

或者加上參數查看就比較清晰了

$ git log --pretty=oneline

9.回退版本

$ git reset --hard HEAD^

說明:在Git中,用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,以此類推,如果需要回退幾十個版本,寫幾十個^容易數不過來,所以可以寫,例如回退30個版本為:HEAD~30。

如果你回退完版本又后悔了,想回來,一般情況下是回不來的,但是如果你可以找到你之前的commit id的話,也是可以的,使用如下即可:

$ git reset --hard + commit id 

提示:commit id不需要寫全,Git會自動查找;

補充說明:Git中,commit id是一個使用SHA1計算出來的一個非常大的數字,用十六進制表示,你提交時看到的一大串類似3628164...882e1e0的就是commit id(版本號);

在Git中,版本回退速度非常快,因為Git在內部有個指向當前版本的HEAD指針,當你回退版本的時候,Git僅僅是把HEAD從指向回退的版本,然后順便刷新工作區文件;

10.查看操作的歷史命令記錄

$ git reflog

結果會將你之前的操作的commit id和具體的操作類型及相關的信息打印出來,這個命令還有一個作用就是,當你過了幾天,你想回退之前的某次提交,但是你不知道commit id了,通過這個你可查找出commit id,就可以輕松回退了,用一句話總結:穿越未來,回到過去,so easy!

11.diff文件

git diff HEAD -- <file>

說明:查看工作區和版本庫里面最新版本文件的區別,也可以不加HEAD參數;

12.丟棄工作區的修改

$ git checkout -- <file>

說明:適用於工作區修改沒有add的文件

13.丟棄暫存區的文件

$ git reset HEAD <file>

說明:適用於暫存區已經add的文件,注意執行完此命令,他會將暫存區的修改放回到工作區中,如果要想工作區的修改也丟棄,就執行第12條命令即可;

14.刪除文件

$ rm <file>

然后提交即可;

如果不小心刪錯了,如果還沒有提交的話使用下面命令即可恢復刪除,注意的是它只能恢復最近版本提交的修改,你工作區的修改是不能被恢復的!

$ git checkout -- <file>

15.創建SSH key

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

一般本地Git倉庫和遠程Git倉庫之間的傳輸是通過SSH加密的,所以我們可以將其生成的公鑰添加到Git服務端的設置中即可,這樣Git就可以知道是你提交的了;

16.與遠程倉庫協作

$ git remote add origin git@github.com:xinpengfei520/IM.git

刪除本地庫與遠程庫的關聯:

$ git remote rm origin

作用:有時候我們需要關聯其他遠程庫,需要先刪除舊的關聯,再添加新的關聯,因為如果你已經關聯過了就不能在關聯了,不過想關聯多個遠程庫也是可以的,前提是你的本地庫沒有關聯任何遠程庫,操作如下:

先關聯Github遠程庫:

$ git remote add github git@github.com:xinpengfei520/IM.git

接着關聯碼雲遠程庫:

$ git remote add gitee git@gitee.com:xinpengfei521/IM.git

現在,我們用git remote -v查看遠程庫的關聯信息,如果看到兩組關聯信息就說明關聯成功了;

ok,現在我們的本地庫可以和多個遠程庫協作了

如果要推送到GitHub,使用命令:

$ git push github master

如果要推送到碼雲,使用命令:

$ git push gitee master

17.推送到遠程倉庫

$ git push -u origin master

注意:第一次提交需要加一個參數-u,以后不需要

18.克隆一個遠程庫

$ git clone git@github.com:xinpengfei520/IM.git

19.Git分支管理

創建一個分支branch1

$ git branch branch1

切換到branch1分支:

$ git checkout branch1

創建並切換到branch1分支:

$ git checkout -b branch1

查看分支:

$ git branch

提示:顯示的結果中,其中有一個分支前有個*號,表示的是當前所在的分支;

合並branch1分支到master:

$ git merge branch1

刪除分支:

$ git branch -d branch1

20.查看提交的歷史記錄

$ git log

命令可以看到分支合並圖

git log --graph

21.合並分支

禁用Fast forward模式合並分支

$ git merge --no-ff -m "merge" branch1

說明:默認Git合並分支時使用的是Fast forward模式,這種模式合並,刪除分支后,會丟掉分支信息,所以我們需要強制禁用此模式來合並;

補充內容:實際開發中分支管理的策略

  • master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面提交;
  • 我們可以新開一個dev分支,也就是說dev分支是不穩定的,到版本發布時,再把dev分支合並到master上,在master分支發布新版本;
  • 你和你的協作者平時都在dev分支上提交,每個人都有自己的分支,時不時地往dev分支上合並就可以了;

22.保存工作現場

$ git stash

作用:當你需要去修改其他內容時,這時候你的工作還沒有做完,先臨時保存起來,等干完其他事之后,再回來回復現場,再繼續干活;為什么?因為暫存區是公用的,如果不通過stash命令隱藏,會帶到其它分支去;

查看已經保存的工作現場列表:

$ git stash list

恢復工作現場(恢復並從stash list刪除):

$ git stash pop

或者:

git stash apply

恢復工作現場,但stash內容並不刪除,如果你需要刪除執行如下命令:

$ git stash drop

恢復指定的stash:

$ git stash apply stash@{0}

說明:其中stash@{0}為git stash list中的一種編號

23.丟棄一個沒有被合並過的分支

強行刪除即可:

$ git branch -D <name>

作用:實際開發中,添加一個新feature,最好新建一個分支,如果要丟棄這個沒有被合並過的分支,可以通過上面的命令強行刪除;

24.查看遠程庫的信息

$ git remote

顯示更詳細的信息:

$ git remote -v

25.推送分支

推送master到遠程庫

$ git push origin master

推送branch1到遠程庫

$ git push origin branch1

26.創建本地分支

$ git checkout -b branch1 origin/branch1

說明:如果遠程庫中有分支,clone之后默認只有master分支的,所以需要執行如上命令來創建本地分支才能與遠程的分支關聯起來;

27.指定本地branch1分支與遠程origin/branch1分支的鏈接

$ git branch --set-upstream branch1 origin/branch1

作用:如果你本地新建的branch1分支,遠程庫中也有一個branch1分支(別人創建的),而剛好你也沒有提交過到這個分支,即沒有關聯過,會報一個no tracking information信息,通過上面命令關聯即可;

28.創建標簽

$ git tag <name>

例如:git tag v1.0

查看所有標簽:

$ git tag

對歷史提交打tag

先使用$ git log --pretty=oneline --abbrev-commit命令找到歷史提交的commit id

例如對commit id 為123456的提交打一個tag:

$ git tag v0.9 123456

查看標簽信息:

$ git show <tagname>

eg:git show v1.0

創建帶有說明的標簽,用-a指定標簽名,-m指定說明文字,123456為commit id:

$ git tag -a v1.0 -m "V1.0 released" 123456

用私鑰簽名一個標簽:

$ git tag -s v2.0 -m "signed V2.0 released" 345678

說明:簽名采用PGP簽名,因此,必須先要安裝gpg(GnuPG),如果沒有找到gpg,或者沒有gpg密鑰對,就會報錯,具體請參考GnuPG幫助文檔配置Key;

作用:用PGP簽名的標簽是不可偽造的,因為可以驗證PGP簽名;

刪除標簽:

$ git tag -d <tagname>

刪除遠程庫中的標簽:

比如要刪除遠程庫中的 V1.0 標簽,分兩步:

[1] 先刪除本地標簽:$ git tag -d V1.0

[2] 再推送刪除即可:$ git push origin :refs/tags/V1.0

推送標簽到遠程庫:

$ git push origin <tagname>

推送所有標簽到遠程庫:

$ git push origin --tags

29.自定義Git設置

Git顯示顏色,會讓命令輸出看起來更清晰、醒目:

$ git config --global color.ui true

設置命令別名:

$ git config --global alias.st status

說明:--global表示全局,即設置完之后全局生效,st表示別名,status表示原始名

好了,現在敲git st就相當於是git status命令了,是不是方便?

當然還有其他命令可以簡寫,這里舉幾個:很多人都用co表示checkout,ci表示commit,br表示branch...
根據自己的喜好可以設置即可,個人覺得不是很推薦使用別名的方式;

推薦一個比較喪心病狂的別名設置:

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

效果自己去體會...

其他說明:配置的時候加上--global是針對當前用戶起作用的,如果不加只對當前的倉庫起作用;每個倉庫的Git配置文件都放在 .git/config 文件中,我們可以打開對其中的配置作修改,可以刪除設置的別名;而當前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig中,我們也可以對其進行配置和修改。

30.忽略文件規則

原則:

  • 忽略系統自動生成的文件等;
  • 忽略編譯生成的中間文件、可執行文件等,比如Java編譯產生的.class文件,自動生成的文件就沒必要提交;
  • 忽略你自己的帶有敏感信息的配置文件,個人相關配置文件;
  • 忽略與自己相關開發環境相關的配置文件;
  • ...

使用:在Git工作區的根目錄下創建一個特殊的 .gitignore 文件,然后把要忽略的文件名或者相關規則填進去,Git就會自動忽略這些文件,不知道怎么寫的可參考:https://github.com/github/gitignore,這里提供了一些忽略的規則,可供參考;

如果你想添加一個被 .gitignore 忽略的文件到Git中,但發現是添加不了的,所以我們可以使用強制添加$ git add -f <file>

或者我們可以檢查及修改 .gitignore 文件的忽略規則:

$ git check-ignore -v <file>

Git會告訴我們具體的 .gitignore 文件中的第幾行規則忽略了該文件,這樣我們就知道應該修改哪個規則了;

如何忽略已經提交到遠程庫中的文件?
如果你已經將一些文件提交到遠程庫中了,然后你想忽略掉此文件,然后在 .gitignore 文件中添加忽略,然而你會發現並沒有生效,因為Git添加忽略時只有對沒有跟蹤的文件才生效,也就是說你沒有add過和提交過的文件才生效,按如下命令:

比如說:我們要忽略.idea目錄,先刪除已經提交到本地庫的文件目錄

git rm --cached .idea

格式:git rm --cached + 路徑

如果提示:fatal: not removing '.idea' recursively without -r

加個參數 -r 即可強制刪除

$ git rm -r --cached .idea

然后,執行git status會提示你已經刪除.idea目錄了,然后執行commit再push就可以了,此時的.idea目錄是沒有被跟蹤的,將.idea目錄添加到 .gitignore 文件中就可以忽略了。

附圖:

這里寫圖片描述

好了,基本差不多了,其實常用的命令也就那么幾個,如果使用多了,就熟練了,相信git給我們工作效率及工作上的提升...

聲明:附圖來自CSDN知識庫,僅作為學習交流用;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM