git常用命令介紹和使用

摘要:本篇文章將記錄git常用命令介紹和使用,主要包括clone、init、add、mv、reset、rm、log、status、branch、checkout、commit、fetch、pull、push。

clone:克隆一個倉庫到新目錄

從遠程主機克隆一個版本庫。

$ gitclone<版本庫的網址>

比如版本庫網址為https://github.com/naffitary/gitstudy.git

$ gitclonehttps://github.com/naffitary/gitstudy.git

該命令會在本地主機生成一個目錄,與遠程主機的版本庫同名 。

如果要指定不同的目錄名,可以將目錄名作為git clone命令的第二個參數。

$ git clone<版本庫的網址><本地目錄名>

比如

$ gitclonehttps://github.com/naffitary/gitstudy.git project.git

該命令會在當前目錄下生成project.git 內容從版本庫的網址中克隆。

git clone支持多種協議,除了HTTP(s)以外,還支持SSH、Git、本地文件協議等。

init:創建一個空的Git倉庫或重新初始化現有的Git倉庫

運用mkdir命令創建一個git目錄

$mkdirproject.git

創建了project.git 目錄,但沒有輸出。

切換到xxx.git目錄(這里我用的是project)下

$cdproject.git/

切換到project.git目錄下,沒有輸出。

顯示目標列表,跟后面產生對比

$ls

沒有輸出。

初始化倉庫

$ git--bare init

輸出Initialized empty Git repository in D:/php相關/git/Git/project.git/,表示初始化完畢,沒有出錯。而且project.git 目錄會有bare標志,顯示為project.git (BARE:master)

再次顯示目標列表,跟前面產生對比

$ls

輸出project.git 下的目標列表config description HEAD hooks/ info/ objects/ refs/

add: 添加文件內容到索引

git add , 只將那些創建或修改并且沒有被刪除的文件添加到索引,其中可以是文件,也可以是目錄。(aa就是我建的一個目錄。)

$gitaddaa

這里我遇到一個問題,正確add任何存在的文件會提示錯誤信息,其它git所屬命令(除init)也會提示錯誤信息:fatal: This operation must be run in a work tree。通過查找資料和實踐發現,可能是我創建的是空倉庫的緣故,在git --bare init之后,先后輸入git init和git remote add origin命令然后git add aa,就可以正確添加了。

git add -u ,把中所有跟蹤文件中被修改過或已刪除文件的信息添加到索引庫。 它不會處理沒有跟蹤的文件。

$gitadd-u? aa

git add -A ,把中所有跟蹤文件中被修改過或已刪除文件和所有未跟蹤的文件信息添加到索引庫。

比如,$git add -A aa

git add -i , 查看中被所有修改過或已刪除文件但沒有提交的文件,

并通過其revert子命令可以查看中所有未跟蹤的文件,同時進入一個子命令系統。

比如

$gitadd -iaa

git add --all,添加當前目錄下的所有的目錄和文件。

$ gitadd--all

以上前4點,都可以用.表示路徑path,表示當前目錄。$git add .,$ git add -u. ,$ git add -A .,$ git add -i .。

比如 輸入

$ gitadd-i .

輸出以下信息。

staged? ? unstaged path

1:? ? ? ? +1/-0+0/-0gitstudy

*** Commands ***

1:status2: update3:revert4: add untracked

5: patch6:diff7:quit8: help

選擇子命令command(注意:可以輸入序號,也可以輸入命令單詞),命令1是狀態,顯示路徑上的變化;命令2是更新,將工作狀態樹添加到更改組 ;命令3是還原,還原更改組到頭版本;命令4是添加未跟蹤,添加未跟蹤文件的內容到更改組;命令5是修補程序即補丁,挑選可行的以及選擇性更新;命令6是差異, 比較單個文件或者目錄內容;命令7是退出,退出該命令選項;命令8是幫助,顯示其他命令的作用,幫助使用。

mv:移動或重命名文件,目錄或符號鏈接

用$ ls查看當前目錄下的文件和目錄,可以看看準備移動的文件存不存在,為后面操作做準備。可以看到當前目錄下有以下文件和目錄11.txt aa/ pro.git/ README.md。

移動11.txt到aa目錄下:

$ git mv11.txtaa

移動完后,查看一下狀態,看看有沒有移動成功。

$ git status-s

可以看到狀態結果如下:

Aaa/11.txt

?? pro.git/

或者再用$ ls查看當前目錄下的文件和目錄,可以看到,當前目錄下文件和目錄為aa/ pro.git/ README.md,aa目錄下多了11.txt,也能說明移動成功。

reset: 將當前HEAD復位為指定狀態

如果發現錯誤的將不想staging的文件add進入index之后,想回退取消,則可以使用如下命令:

gitresetHEAD...

同時git add完畢之后,git也會做相應的提示。

git reset[--mode ][或HEAD]

將當前的分支重設(reset)到指定的或者HEAD(如果不顯示指定commit,默認是HEAD,即最新的一次提交)。mode的取值可以是hard、mixed。

gitreset--hard

重設index和working directory,自從以來在working directory中的任何改變都被丟棄,并把HEAD指向。

gitreset--mixed

僅重設index,但是不重設working directory。這個模式是默認模式,即當不顯示告知git reset模式時,會使用mixed模式。這個模式的效果是,working directory中文件的修改都會被保留,不會丟棄,也不會被標記成"Changes to be committed"。

rm:從工作樹和索引中刪除文件

使用格式:

git rm [] [--] ...

-n, --dry-run? ? ? ? ? 干運行

-q, --quiet? ? ? ? ? ? ? 不列出刪除的文件

--cached? ? ? ? ? ? ? ? 只能從索引中刪除

-f, --force? ? ? ? ? ? ? ? 覆蓋最新的檢查

-r? ? ? ? ? ? ? ? ? ? ? ? ? ? 允許遞歸刪除

--ignore-unmatch? ? 退出零狀態即使沒有匹配

注意:$ git rm文件名 ,必須在跟蹤并提交到倉庫中即add和commit后,才能刪除。如果是已提交并修改后的文件和目錄,需要用git commit -a -m文件名或git commit -a選擇提交,不然會提示錯誤信息,error: the following file has local modifications:文件在本地被修改了。直接用git commit -m文件名或git commit選擇提交是無法正常刪除的,因為雖然沒有提示錯誤信息但實際上并沒有commit成功。

log:顯示提交日志

不帶參數,會顯示所有的歷史記錄

$gitlog

按時間輸出,最近的在最上面,

commit8deb05890c4a3d3a5da0085e8d93fde6a8105076 (HEAD->master, origin/master, origin/HEAD)

Author: naffitary <2219165492@qq.com>

Date:? Wed Jul513:32:372017+0800

Initialcommit

帶參數-p,按補丁顯示每個更新間的差異。

commit8deb05890c4a3d3a5da0085e8d93fde6a8105076 (HEAD->master, origin/master, origin/HEAD)

Author: naffitary <2219165492@qq.com>

Date:? Wed Jul513:32:372017+0800

Initialcommit

diff--git a/README.md b/README.md

newfilemode100644

index0000000..a077ed0

--- /dev/null

+++ b/README.md

@-0,0+1@@

+# gitstudy

\Nonewlineatendoffile

帶參數--stat,顯示每次更新的修改文件的統計信息,每個提交都列出了修改過的文件,以及其中添加和移除的行數,并在最后列出所有增減行數小計

$ git status-s

輸出信息沒有-p命令詳細。

AD aa/gitstudy.git

??11.txt

??? pro.git

status:顯示工作樹狀態

輸出詳細狀態信息用$ git status,輸出簡短狀態信息用$ git status -s。

branch:列表,創建或刪除分支

git branch命令的-r選項,可以用來查看遠程分支。

$ gitbranch-r

輸出

origin/master

-a選項查看所有分支。

$ gitbranch-a

輸出

*master

remotes/origin/master

上面命令表示,本地主機的當前分支是master,遠程分支是origin/master。

checkout:切換分支或恢復工作樹文件

使用git checkout命令創建一個新的分支。

$ git checkout -bnewBrachorigin/master

上面命令表示,在origin/master的基礎上,創建一個新分支。

此外,也可以使用git merge命令或者git rebase命令,在本地分支上合并遠程分支。

$ git merge origin/master

或者

$git rebase origin/master

上面命令表示在當前分支上,合并origin/master。

commit:將更改記錄添加到倉庫中

注意:養成在一開始就輸入以下命令,來事先設置郵箱和用戶名,以防遠程操作的命令出錯。

$ gitconfig--global user.email “2219165492@qq.com”

$ gitconfig--global user.name “naffitary”

$git commit? -m"提交的描述信息"

如果我們這里不用-m參數的話,即$ git commit;git將調到一個文本編譯器(通常是vim)來讓你輸入提交的描述信息,前面有#將會被無視,若想被commit去掉前面的#并ZZ或:wq保存并退出,git commit -a也是如此。

$ git commit -a-m"提交的描述信息"

git commit命令的-a選項可只將所有被修改或者已刪除的且已經被git管理的文檔提交到倉庫中。如果只是修改或者刪除了已被Git管理的文檔,是沒必要使用git add命令的。

git add .命令除了能夠判斷出當前目錄(包括其子目錄)所有被修改或者已刪除的文檔,還能判斷用戶所添加的新文檔,并將其信息追加到索引中。

$ gitcommit--amend

對于已經修改提交過的注釋,如果需要修改,可以借助git commit --amend來進行。

fetch:從另一個存儲庫下載對象和引用

將遠程主機的版本庫的更新(Git術語叫做commit)取回本地。默認情況下,git fetch取回所有分支(branch)的更新。

$ git fetch<遠程主機名>

比如,

$git fetch origin

如果只想取回特定分支的更新,可以指定分支名。

$ git fetch<遠程主機名><分支名>

比如,

$ git fetch originmaster

pull:從另一個存儲庫或本地分支中拉取并集成

取回遠程主機某個分支的更新,再與本地的指定分支合并。

$ git pull<遠程主機名><遠程分支名>:<本地分支名>

比如,取回origin主機的next分支,與本地的master分支合并:

$ git pull originnext:master

如果遠程分支是與當前分支合并,則冒號后面的部分可以省略。

$git pull originnext

上面命令表示,取回origin/next分支,再與當前分支合并。實質上,這等同于先做git fetch,再做git merge。

$git fetch origin

$git merge origin/next

如果當前分支與遠程分支存在追蹤關系,git pull就可以省略遠程分支名。

$git pull origin

上面命令表示,本地的當前分支自動與對應的origin主機”追蹤分支”進行合并。

如果當前分支只有一個追蹤分支,連遠程主機名都可以省略。

$git pull

上面命令表示,當前分支自動與唯一一個追蹤分支進行合并。

push:推送更新遠程引用以及關聯的對象

將本地分支的更新,推送到遠程主機。

$ git push<遠程主機名><本地分支名>:<遠程分支名>

注意,分支推送順序的寫法是<來源地>:<目的地>,所以git pull是<遠程分支>:<本地分支>,而git push是<本地分支>:<遠程分支>。

如果省略遠程分支名,則表示將本地分支推送與之存在”追蹤關系”的遠程分支(通常兩者同名),如果該遠程分支不存在,則會被新建。

$ gitpushoriginmaster

上面命令表示,將本地的master分支推送到origin主機的master分支。如果后者不存在,則會被新建。

如果省略本地分支名,則表示刪除指定的遠程分支,因為這等同于推送一個空的本地分支到遠程分支。

$ gitpushorigin:master

等同于

$ gitpushorigin--deletemaster

上面命令表示刪除origin主機的master分支。

如果當前分支與遠程分支之間存在追蹤關系,則本地分支和遠程分支都可以省略。

$ gitpushorigin

上面命令表示,將當前分支推送到origin主機的對應分支。

如果當前分支只有一個追蹤分支,那么主機名都可以省略。

$ gitpush

如果當前分支與多個主機存在追蹤關系,則可以使用-u選項指定一個默認主機,這樣后面就可以不加任何參數使用git push。

$ gitpush-uoriginmaster

上面命令將本地的master分支推送到origin主機,同時指定origin為默認主機,后面就可以不加任何參數使用git push了。不帶任何參數的git push,默認只推送當前分支,這叫做simple方式。此外,還有一種matching方式,會推送所有對應的遠程分支的本地分支。如果要修改這個設置,可以采用git config命令。

$ gitconfig--global push.defaultmatching

或者

$ gitconfig--global push.defaultsimple

還有一種情況,就是不管是否存在對應的遠程分支,將本地的所有分支都推送到遠程主機,這時需要使用–all選項。

$git push --allorigin

上面命令表示,將所有本地分支都推送到origin主機。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,250評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,923評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,041評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,475評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,253評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,801評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,882評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,023評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,530評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,494評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,639評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,177評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,890評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,289評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,552評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,242評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,626評論 2 370

推薦閱讀更多精彩內容