Git筆記

我的GIT筆記

995662315@qq.com

我們一開始需要先自曝家門:

git config --global user.name 
git config --global user.email 
  1. 首先可以CD到我們想要用到的地方

  2. Git init :使用當(dāng)前目錄作為倉庫

  3. Git init *** : 在當(dāng)前目錄下創(chuàng)建*** ,并使其作為倉庫

在倉庫目錄下,創(chuàng)建文件,要把文件提交到倉庫,需要兩步:

  1. git add 文件名 (注意需要加上后綴)

可以重復(fù)執(zhí)行此操作,然后一次性提交多個文件

  1. git commit -m “ *** ” (***是我們對于本次提交的補(bǔ)充說明,很重要??!養(yǎng)成寫他的好習(xí)慣)

$ git commit -m "add a test file named readme.txt "

[master (root-commit) d005bba] add a test file named readme.txt

1 file changed, 2 insertions(+)

create mode 100644 readme.txt

這就是提交成功了!~~

git clone

我們使用 git clone 從現(xiàn)有 Git 倉庫中拷貝項(xiàng)目(類似 svn checkout)。

克隆倉庫的命令格式為:

<pre style="line-height:15.0pt;background:#FBFBFB;word-break:break-all;border:none;
mso-border-alt:solid #DDDDDD .75pt;mso-border-left-alt:solid #DDDDDD 3.0pt;
padding:0cm;mso-padding-alt:8.0pt 11.0pt 8.0pt 11.0pt">git clone <repo></pre>

如果我們需要克隆到指定的目錄,可以使用以下命令格式:

<pre style="line-height:15.0pt;background:#FBFBFB;word-break:break-all;border:none;
mso-border-alt:solid #DDDDDD .75pt;mso-border-left-alt:solid #DDDDDD 3.0pt;
padding:0cm;mso-padding-alt:8.0pt 11.0pt 8.0pt 11.0pt">git clone <repo> <directory></pre>

比如,要克隆 Ruby 語言的 Git 代碼倉庫 Grit,可以用下面的命令:

$ git clone git://github.com/schacon/grit.git

執(zhí)行該命令后,會在當(dāng)前目錄下創(chuàng)建一個名為grit的目錄,其中包含一個 .git 的目錄,用于保存下載下來的所有版本記錄。

如果要自己定義要新建的項(xiàng)目目錄名稱,可以在上面的命令末尾指定新的名字:

$ git clone git://github.com/schacon/grit.git mygrit

新項(xiàng)目中,添加所有文件很普遍,我們可以使用 git add . 命令來添加當(dāng)前項(xiàng)目的所有文件

查看改動:

Git status:

git status 以查看在你上次提交之后是否有修改。

我演示該命令的時候加了 -s 參數(shù),以獲得簡短的結(jié)果輸出

Git diff:

執(zhí)行 git diff 來查看執(zhí)行 git status 的結(jié)果的詳細(xì)信息。

git diff 命令顯示已寫入緩存與已修改但尚未寫入緩存的改動的區(qū)別

GIT****版本回退:

git log可以查看歷史版本號,比如:

[圖片上傳失敗...(image-9f5b56-1552978443422)]

而帶HEAD的就是當(dāng)前版本,上個版本是HEAD,上上個是HEAD^,

那么上一百個呢? HEAD~100

比如我們要回退到上個版本,直接:

git reset --hard HEAD^

[圖片上傳失敗...(image-bbe003-1552978443422)]

現(xiàn)在再 git log , 就回到了第一個版本,那么我們之前的那個“my test”版本呢?

如果你還沒有退出git窗口,這是沒問題的!

觀察:

[圖片上傳失敗...(image-9ea73f-1552978443422)]

這里有很長的一串16進(jìn)制號碼,那么只要我們回去翻到之前的這個號碼,然后:

git reset --hard 那個號碼

這樣就可以找回來了,而且,我們可以只輸入那個號碼的前幾位便可

如圖:

[圖片上傳失敗...(image-38f234-1552978443422)]

問題又來了:我要是已經(jīng)關(guān)閉了git 的窗口,并且對于版本的回退后悔了,咋辦?

依然有辦法:git reflog

[圖片上傳失敗...(image-2a4b48-1552978443422)]

這樣,就又可以找到我們之前的16進(jìn)制號碼的前幾位了。

Git 管理的是修改,而非文件:

例如,我們1.修改readme,2.git add readme.txt, 3.再次修改readme, 4 git commit –m “***”;

這時,我們的readme是不是被修改了兩次呢?是的,但是我們的git 只讀取到了一次修改,因?yàn)椋诙涡薷臎]有被add,誠然此時文件已經(jīng)改了,但是因?yàn)闆]有捕捉到這次修改,我們commit的只是第一次修改的內(nèi)容。

提交后,用git diff HEAD -- readme.txt命令可以查看工作區(qū)和版本庫里面最新版本的區(qū)別

撤銷修改

如果我們做了一些修改,但是又不想讓他們生效,怎么辦呢:

Case 1. 你修改了,但是還沒有add,那么有兩種修改方法:可以去找到那個文件,把他手動改回來;也可以使用命令 git checkout -- 文件名;

Case 2. 你不但修改了,還把他add到了暫存區(qū),那么你需要:

1) git reset HEAD 文件名

2) git checkout -- 文件名

Csae 3. 你把它c(diǎn)ommit了,等死吧!

刪除文件:

我們可以直接刪掉想要刪除的那個文件

不過此時版本庫中還沒有刪掉,此時將有兩個選擇:

1) 確實(shí)想把它刪掉,那就 git rm 文件名;git commit –m “***”.

2) 不想刪掉,這是誤操作

此時,可以利用git 來恢復(fù),因?yàn)榘姹編炖镞€有它。

git checkout – 文件名

就可以在本地恢復(fù)該文件,不過只能恢復(fù)文件到最新版本,之前的都會丟失掉!

創(chuàng)建好 github后,關(guān)聯(lián)ssh ,就可以體驗(yàn)遠(yuǎn)程倉庫的牛逼之處啦!

git remote add origin https://github.com/hchuanZ/....git

git push -u origin master

該命令把當(dāng)前本地庫上的所有內(nèi)容推送到github上

從現(xiàn)在起,只有本地做了提交,就可以通過

git push origin master

這個命令把本地庫上的內(nèi)容推送到遠(yuǎn)程庫里

看看我的github吧

[圖片上傳失敗...(image-86a2ff-1552978443422)]

這是先本地創(chuàng)建倉庫,在連接遠(yuǎn)程的方式,那么如果我們是遠(yuǎn)程現(xiàn)有倉庫,現(xiàn)在要弄到本地呢??

可以用git clone來完成:

<pre style="margin-top:11.25pt;margin-right:0cm;margin-bottom:11.25pt;margin-left:
0cm;line-height:13.5pt;background:#FAFAFA;word-break:break-all;border:none;
mso-border-alt:solid #DDDDDD .75pt;padding:0cm;mso-padding-alt:8.0pt 8.0pt 8.0pt 8.0pt">git clone git@github.com:hchuanZ /gitskills.git</pre>

<pre style="margin-top:11.25pt;margin-right:0cm;margin-bottom:11.25pt;margin-left:
0cm;line-height:13.5pt;background:#FAFAFA;word-break:break-all;border:none;
mso-border-alt:solid #DDDDDD .75pt;padding:0cm;mso-padding-alt:8.0pt 8.0pt 8.0pt 8.0pt">[圖片上傳失敗...(image-3a6ada-1552978443418)] </pre>

此時,我們將看到,g/git_code目錄下多了gitskills文件夾:

[圖片上傳失敗...(image-a428b-1552978443421)]

而里面則是README.md文件

GitHub給出的地址不止一個,還可以用https://github.com/hchuanZ/gitskills.git這樣的地址。實(shí)際上,Git支持多種協(xié)議,默認(rèn)的git://使用ssh,但也可以使用https等其他協(xié)議。

使用https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令,但是在某些只開放http端口的公司內(nèi)部就無法使用ssh協(xié)議而只能用https。

分支管理:

每次提交,GIT都把他們串成一條時間線,這條時間線就是一個分支。

Git里,如果只有一條分支,那么這條分支就是主分支,叫做master分支。

HEAD嚴(yán)格來說,不是指向提交,而至指向master,而master才是指向提交的。所以HEAD指向的就是當(dāng)前分支。[圖片上傳失敗...(image-cdcfa0-1552978443421)] 每次提交,master分支都會向前移動一步,這樣,隨著你的不斷提交,master分支的線也會越來越長;

當(dāng)我們要創(chuàng)建新的分支:

例如要創(chuàng)建dev分支,就是創(chuàng)建一個dev指針,指向master同樣的提交,再把HEAD指向dev,就表示當(dāng)前分支在dev上。

[圖片上傳失敗...(image-8b7981-1552978443421)]

現(xiàn)在開始,對工作區(qū)的修改和提交就是針對dev分支了,比如新提交一次后,dev指針往前移動一步,而Master指針不變,如圖:[圖片上傳失敗...(image-adab7c-1552978443421)]

假如,我們在dev分支上的任務(wù)完成了,就可以把dev合并到master上。Git怎么合并呢? 最簡單的方法就是直接把master指向當(dāng)前的提交,就完成了合并:

[圖片上傳失敗...(image-6dce77-1552978443421)]

這個過程只是指針的變化,工作區(qū)沒有做什么更改,所以Git分支合并是很快的;

顧名思義,如果我們想刪除dev分支,只需要把dev指針給刪除掉就好了

實(shí)際代碼:

創(chuàng)建dev分支:git checkout –b dev

這相當(dāng)于以下兩行:git branch dev

git checkout dev

如:

[圖片上傳失敗...(image-ba1398-1552978443420)]

用git branch可以查看當(dāng)前分支:

如:

[圖片上傳失敗...(image-7f98db-1552978443420)]

如圖所示,當(dāng)前的分支前面,會加上一個*號,那么我們當(dāng)前的分支就是dev

我們可以試一試在當(dāng)前分支下進(jìn)行提交,比如,我已經(jīng)修改了readme.txt的內(nèi)容,

[圖片上傳失敗...(image-c6736a-1552978443420)]

完成提交后,此時我們切換回master分支,

git checkout master

[圖片上傳失敗...(image-dfb802-1552978443420)]

可是,如果直接切換回master的話,我們之前的修改是找不到的!

因?yàn)槟莻€提交是在dev上完成的,所以我們需要吧dev分支的工作成功整合到master上:

git merge dev 可以幫我們辦到,merge 表示把指定分支整合到當(dāng)前分支。

[圖片上傳失敗...(image-3fbad5-1552978443420)]

注意顯示的是Fast-forward,這個代表的是,本次合并是“快進(jìn)模式”,也就是直接把Master指向dev的提交,所以會很快,但并不是每次合并都可以快進(jìn)模式完成。

好了,現(xiàn)在我們也可放心的刪除掉dev分支了

git branch –d dev

[圖片上傳失敗...(image-99350b-1552978443420)]

如圖所示,刪除后,再用git branch 查看,就只剩master一個分支了。

因?yàn)閯?chuàng)建、合并、刪除分支非常快,所以鼓勵使用分支來完成某個任務(wù),合并后再刪掉分支,這和直接再master分支上工作是一樣的,但是過程會更安全。

小結(jié):

查看分支:git branch

創(chuàng)建并切換分支:git checkout –b 分支名

只創(chuàng)建分支:git branch <name>

切換分支:git checkout <name>

合并某分支到當(dāng)前分支:git merge <name>

刪除分支:git branch –d <name>

不過,如果是Fast Forward模式,我們再刪除分支后,會丟掉分支信息,也許這不是我們期望的。所以,我們再git merge 時可以強(qiáng)制禁用Fast Forward 模式,這樣git就會新生成一個commit。

禁用Fast Forward:

git merge --no-ff –m “添加commit,所以需要備注信息” <name>

實(shí)際開發(fā)中,master通常需要很穩(wěn)定的發(fā)布版本,所以不會再master上做開發(fā),每個員工都會有自己的一個分支,通常會把這些分支時不時的往dev合并。

所以實(shí)際開發(fā)時應(yīng)當(dāng)如圖:

[圖片上傳失敗...(image-690869-1552978443420)]

當(dāng)手頭工作沒有完成時,先把工作現(xiàn)場git stash一下,然后去修復(fù)bug,修復(fù)后,再git stash pop,回到工作現(xiàn)場。

用Git stash 可以保留現(xiàn)場,保留后,創(chuàng)建一個用于修復(fù)bug的分支,修復(fù)后,將該分支合并,最后git stash pop,還原現(xiàn)場。 Git stash list 可以查看stash里的狀態(tài)。

Feature****分支:每次添加新功能,最好新建一個feature分支,在這上面做開發(fā)。如果:已經(jīng)在feature上提交修改,但是還沒合并,此時我們想要刪除這個開發(fā)的內(nèi)容,怎么辦呢?

Git branch –d <name>

是嗎?其實(shí)這樣是不可以的,我們需要吧-d 替換成-D,就可以強(qiáng)制刪除了。

多人協(xié)作:

1.首先,可以用git push origin<branch-name>推送自己的修改

2.如果推送失敗,則因?yàn)檫h(yuǎn)程分支比你本地更新,需要先用git pull試圖合并。

3.如果合并有沖突,則解決沖突,并在本地提交

4.再執(zhí)行第一步

如果 git pull提示no stracking information,則說明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒有創(chuàng)建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

更新碼云項(xiàng)目常用操作順序:

1 git status查看狀態(tài)
2 git add . 本地添加改動
3 git commit -m 'info' 本地提交
4 git branch 查看分支
5 git cheakout master 如果不是master則切換到master
6 git merge 提交的分支name 把操作分支同步到主分支
7 git push 推到碼云

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

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

  • Git 是目前最流行的分布式版本控制系統(tǒng)之一。 版本控制指的是,記錄每次版本變更的內(nèi)容和時間等細(xì)節(jié),保留各版本之間...
    神齊閱讀 1,515評論 0 7
  • 最近使用Git時感到有些生疏,所以利用晚上空余時間將廖雪峰Git教程重新系統(tǒng)的學(xué)習(xí)一邊并做了筆記,溫故知新。 Gi...
    LannisZheng閱讀 753評論 1 3
  • Git 分布式版本控制系統(tǒng) linux安裝git 使用命令:==sudo apt-get git== git創(chuàng)建倉...
    Edmonton閱讀 450評論 0 0
  • 一.Git簡介 Git是世界上最先進(jìn)的分布式版本控制系統(tǒng),相對于SVN這樣的集中式版本控制系統(tǒng),Git不需要“中央...
    ahuustcly閱讀 802評論 0 0
  • 一:Git是什么? Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)。 二:SVN與Git的最主要的區(qū)別? SVN是集...
    Splendid飛羽閱讀 358評論 0 0

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