git學(xué)習(xí)筆記

學(xué)習(xí)Git需要清楚的幾個(gè)術(shù)語

Workspace:工作區(qū)

Index/Stage:暫存區(qū),也叫索引

Repository:倉庫區(qū)(或本地倉庫),也存儲(chǔ)庫

Remote:遠(yuǎn)程倉庫

工作區(qū): 通過git init創(chuàng)建的代碼庫的所有文件但是不包括.git文件(版本庫)

暫存區(qū): 通過git add .//Xxx/Xxxx* 添加的修改,都是進(jìn)入到暫存區(qū)了,肉眼不可見 通過 git status 可以看到修改的狀態(tài)。

三種狀態(tài)

Git 有三種狀態(tài),你的文件可能處于其中之一:已提交(committed)、已修改(modified)和已暫存(staged)。 已提交表示數(shù)據(jù)已經(jīng)安全的保存在本地?cái)?shù)據(jù)庫中。 已修改表示修改了文件,但還沒保存到數(shù)據(jù)庫中。 已暫存表示對(duì)一個(gè)已修改文件的當(dāng)前版本做了標(biāo)記,使之包含在下次提交的快照中。

由此引入 Git 項(xiàng)目的三個(gè)工作區(qū)域的概念:Git 倉庫、工作目錄以及暫存區(qū)域。工作目錄、暫存區(qū)域以及 Git 倉庫如下圖所示


Git 倉庫目錄是 Git 用來保存項(xiàng)目的元數(shù)據(jù)和對(duì)象數(shù)據(jù)庫的地方。 這是 Git 中最重要的部分,從其它計(jì)算機(jī)克隆倉庫時(shí),拷貝的就是這里的數(shù)據(jù)。

工作目錄是對(duì)項(xiàng)目的某個(gè)版本獨(dú)立提取出來的內(nèi)容。 這些從 Git 倉庫的壓縮數(shù)據(jù)庫中提取出來的文件,放在磁盤上供你使用或修改。

暫存區(qū)域是一個(gè)文件,保存了下次將提交的文件列表信息,一般在 Git 倉庫目錄中。 有時(shí)候也被稱作‘索引’,不過一般說法還是叫暫存區(qū)域。

用戶信息

當(dāng)安裝完 Git 應(yīng)該做的第一件事就是設(shè)置用戶名稱與郵件地址。這樣做很重要,因?yàn)槊恳粋€(gè) Git 的提交都會(huì)使用這些信息,并且它會(huì)寫入到每一次提交中,不可更改:

$ git config --global user.name "maxsu"
$ git config --global user.email maxsu@yiibai.com

設(shè)置文本編輯器

$ git config --global core.editor atom

檢查配置信息

如果想要檢查你的配置,可以使用 git config --list 命令來列出所有 Git 當(dāng)時(shí)能找到的配置。

常用基礎(chǔ)命令

git add 指定跟蹤文件,然后執(zhí)行 git commit 提交

$ git add hello.py
$ git commit -m '修改說明'

要查看哪些文件處于什么狀態(tài),可以用 git status 命令。

忽略文件

總會(huì)有些文件無需納入 Git 的管理,也不希望它們總出現(xiàn)在未跟蹤文件列表。我們可以創(chuàng)建一個(gè)名為 .gitignore 的文件,列出要忽略的文件模式。

.gitignore 的格式規(guī)范如下:

  • 所有空行或者以 開頭的行都會(huì)被 Git 忽略。
  • 可以使用標(biāo)準(zhǔn)的 glob 模式匹配。
  • 匹配模式可以以(/)開頭防止遞歸。
  • 匹配模式可以以(/)結(jié)尾指定目錄。
  • 要忽略指定模式以外的文件或目錄,可以在模式前加上驚嘆號(hào)(!)取反。

所謂的 glob 模式是指 shell 所使用的簡化了的正則表達(dá)式。

提示:GitHub 有一個(gè)十分詳細(xì)的針對(duì)數(shù)十種項(xiàng)目及編程語言的 .gitignore 文件列表,你可以在 http://github.com/github/gitignore 找到它。

查看已暫存和未暫存的修改

如果 git status 命令的輸出對(duì)于你來說過于模糊,你想知道具體修改了什么地方,可以用 git diff 命令。

請(qǐng)注意,git diff 本身只顯示尚未暫存的改動(dòng),而不是自上次提交以來所做的所有改動(dòng)。 所以有時(shí)候你一下子暫存了所有更新過的文件后,運(yùn)行 git diff 后卻什么也沒有,就是這個(gè)原因。

然后用 git diff --cached 查看已經(jīng)暫存起來的變化:(--staged--cached 是同義詞)

跳過使用暫存區(qū)域

Git 提供了一個(gè)跳過使用暫存區(qū)域的方式, 只要在提交的時(shí)候,給 git commit 加上 -a 選項(xiàng),Git 就會(huì)自動(dòng)把所有已經(jīng)跟蹤過的文件暫存起來一并提交,從而跳過 git add 步驟。

移除文件

git rm 移除已跟蹤文件(同時(shí)會(huì)刪除工作目錄中的文件)。
如果刪除之前修改過并且已經(jīng)放到暫存區(qū)域的話,則必須要用強(qiáng)制刪除選項(xiàng) -f(注:即 force 的首字母)。 這是一種安全特性,用于防止誤刪還沒有添加到快照的數(shù)據(jù),這樣的數(shù)據(jù)不能被 Git 恢復(fù)。

另外一種情況是,想讓文件保留在磁盤,但是并不想讓 Git 繼續(xù)跟蹤。 當(dāng)你忘記添加 .gitignore 文件,不小心把一個(gè)很大的日志文件或一堆 .a 這樣的編譯生成文件添加到暫存區(qū)時(shí),可以使用 --cached 選項(xiàng):

$ git rm --cached mytext.txt
$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        deleted:    mytext.txt

git rm 命令后面可以列出文件或者目錄的名字,也可以使用 glob 模式。

移動(dòng)文件

$ git mv file_from file_to

查看提交歷史

默認(rèn)不用任何參數(shù)的話,git log 會(huì)按提交時(shí)間列出所有的更新,最近的更新排在最上面。

顯示最近兩次提交內(nèi)容差異:

$ git log -p -2

每次提交的簡略的統(tǒng)計(jì)信息:

$ git log --stat

另外一個(gè)常用的選項(xiàng)是 --pretty 。 這個(gè)選項(xiàng)可以指定使用不同于默認(rèn)格式的方式展示提交歷史。 這個(gè)選項(xiàng)有一些內(nèi)建的子選項(xiàng)供你使用。 比如用 oneline 將每個(gè)提交放在一行顯示,查看的提交數(shù)很大時(shí)非常有用。 另外還有 short ,fullfuller 可以用,展示的信息或多或少有些不同。

$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit

$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : changed the version number
085bb3b - Scott Chacon, 6 years ago : removed unnecessary test
a11bef0 - Scott Chacon, 6 years ago : first commit

撤消操作

有時(shí)候我們提交完了才發(fā)現(xiàn)漏掉了幾個(gè)文件沒有添加,或者提交信息寫錯(cuò)了,可以運(yùn)行帶有 --amend 選項(xiàng)的提交命令嘗試重新提交:

$ git commit --amend

這個(gè)命令會(huì)將暫存區(qū)中的文件提交。 如果自上次提交以來你還未做任何修改(例如,在上次提交后馬上執(zhí)行了此命令),那么快照會(huì)保持不變,而你所修改的只是提交信息。

例如,提交后發(fā)現(xiàn)忘記了暫存某些需要的修改,可以像下面這樣操作:

$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend

最終你只會(huì)有一個(gè)提交 - 第二次提交將代替第一次提交的結(jié)果。

取消暫存的文件

reset 后面不跟參數(shù)就是取消所有。

git reset HEAD mytext.txt

撤消對(duì)文件的修改

git status
On branch master
Your branch is up-to-date with 'origin/master'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   123

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   123

按照說明輸入命令撤銷

git checkout -- 123

隱藏(Stash)操作

要切換任務(wù)做其他的,但不想提交一直在做的工作; 那么可以把當(dāng)前工作的改變隱藏起來。 要將一個(gè)新的存根推到堆棧上,運(yùn)行 git stash 命令。通過使用 git stash list 命令來查看已存在更改的列表。執(zhí)行 git stash pop 命令即可從堆棧中刪除更改并將其放置在當(dāng)前工作目錄中。

查看遠(yuǎn)程倉庫

如果想查看你已經(jīng)配置的遠(yuǎn)程倉庫服務(wù)器,可以運(yùn)行 git remote 命令。 它會(huì)列出你指定的每一個(gè)遠(yuǎn)程服務(wù)器的簡寫。

指定選項(xiàng) -v,會(huì)顯示需要讀寫遠(yuǎn)程倉庫使用的 Git 保存的簡寫與其對(duì)應(yīng)的 URL。

添加遠(yuǎn)程倉庫

 git remote add <shortname> <url>

從遠(yuǎn)程倉庫中抓取與拉取

git fetch [remote-name]

這個(gè)命令會(huì)訪問遠(yuǎn)程倉庫,從中拉取所有還沒有的數(shù)據(jù)。執(zhí)行完成后,將會(huì)擁有那個(gè)遠(yuǎn)程倉庫中所有分支的引用,可以隨時(shí)合并或查看。

如果使用 clone 命令克隆了一個(gè)倉庫,命令會(huì)自動(dòng)將其添加為遠(yuǎn)程倉庫并默認(rèn)以 “origin” 為簡寫。 所以,git fetch origin 會(huì)抓取克隆(或上一次抓取)后新推送的所有工作。 必須注意 git fetch 命令會(huì)將數(shù)據(jù)拉取到本地倉庫, 它并不會(huì)自動(dòng)合并或修改當(dāng)前的工作。
如果你有一個(gè)分支設(shè)置為跟蹤一個(gè)遠(yuǎn)程分支,可以使用 git pull 命令來自動(dòng)的抓取然后合并遠(yuǎn)程分支到當(dāng)前分支。 這對(duì)你來說可能是一個(gè)更簡單或更舒服的工作流程;默認(rèn)情況下,git clone 命令會(huì)自動(dòng)設(shè)置本地 master 分支跟蹤克隆的遠(yuǎn)程倉庫的 master 分支(或不管是什么名字的默認(rèn)分支)。 運(yùn)行 git pull 通常會(huì)從最初克隆的服務(wù)器上抓取數(shù)據(jù)并自動(dòng)嘗試合并到當(dāng)前所在的分支。

推送到遠(yuǎn)程倉庫

推送命令: git push [remote-name] [branch-name] 。

$ git push origin master

查看遠(yuǎn)程倉庫

查看遠(yuǎn)程倉庫的更多信息: remote show [remote-name] 。

$ git remote show origin

遠(yuǎn)程倉庫的移除與重命名

$ git remote rename old new

更多詳細(xì)命令請(qǐng)參考
https://git-scm.com/book/zh/v2
http://www.yiibai.com/git/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Git教程 一、Git簡介 1.1. Git的誕生1.2.集中式的vs分布式 二、安裝Git 三、創(chuàng)建版本庫 四、...
    曹淵說創(chuàng)業(yè)閱讀 1,037評(píng)論 0 2
  • Git是目前最流行的版本管理系統(tǒng),也是最先進(jìn)的分布式版本控制系統(tǒng)(distributed version cont...
    pro648閱讀 5,998評(píng)論 1 17
  • 來之前,想了很多次,見到你要親口對(duì)你說,這幾個(gè)月,我很想你。然而,相聚短暫,離別匆匆。還是沒有親口說。 我走了。 ...
    蓬蓬蓬的毛毛熊閱讀 291評(píng)論 1 0
  • 文/掌心書你身邊肯定有這樣的人,明明是同一幫人,她卻始終與人群保持著一段距離。人群里嬉笑喧鬧不已,說著各種八卦新聞...
    掌心書閱讀 926評(píng)論 1 1
  • 早晨7點(diǎn)半,我昨晚定的鬧鈴準(zhǔn)時(shí)響起來。我推了推身邊的C老師,他不耐煩地嘟囔了一聲,大手大腳就直接搭過來,一把把我摟...
    夢(mèng)蝶Ariel閱讀 253評(píng)論 0 2

友情鏈接更多精彩內(nèi)容