Git學(xué)習(xí)記錄(基礎(chǔ)操作)

本文不適合初學(xué)者,僅僅提供命令目錄簡(jiǎn)單解釋或者當(dāng)做操作手冊(cè)使用,沒(méi)有關(guān)于背景或者詳細(xì)命令解釋。

學(xué)習(xí)git總是斷斷續(xù)續(xù)的,而且基本都是現(xiàn)學(xué)現(xiàn)用,用過(guò)一段時(shí)間就忘記了一些常用命令,好記性不如爛筆頭,我覺(jué)得還是得記錄下來(lái),以便于之后忘記了可以迅速的了解并且上手。

關(guān)于git的背景介紹之類的,就不多做介紹如果有需要了解請(qǐng)?jiān)L問(wèn)鏈接:
廖雪峰的git教程

下面正式開(kāi)始

git pull 拉取代碼
git push推送代碼

  1. git init命令把這個(gè)目錄變成Git可以管理的倉(cāng)庫(kù),比如我們開(kāi)始開(kāi)發(fā)一個(gè)新的項(xiàng)目并且作為git的倉(cāng)庫(kù),那么在這個(gè)目錄下面就可以實(shí)行這個(gè)命令
  2. git add告訴Git,把文件添加到倉(cāng)庫(kù)
  3. git commit告訴Git,把文件提交到倉(cāng)庫(kù),需要跟-m "解釋",完整使用
    git commit -m "提交了哪些,用作干嘛的之類的"
    注:提交一個(gè)文件首先add,然后commit
  4. git status 是用來(lái)查詢當(dāng)前版本狀態(tài),比如有哪些add,哪些文件修改了之類的信息。
  5. git diff顧名思義就是查看difference,git diff 文件名.后綴
  6. git log 查看版本提交歷史,這個(gè)可以用于回退歷史使用。如下面
$ git log  

commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 15:11:49 2013 +0800
append GPL

commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 14:53:12 2013 +0800
add distributed

commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Mon Aug 19 17:51:55 2013 +0800
wrote a readme file 

commit后面跟著一大串?dāng)?shù)字就是commit提交該次的id號(hào)碼
可以顯示的更加清晰請(qǐng)?jiān)诤竺娓?--pretty=oneline 如圖:

$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file
  1. git reset --hard 回退版本,HEAD是當(dāng)前版本,回退上一個(gè)是HEAD,上上個(gè)是HEAD^,以此類推,回退100個(gè)就是HEAD~100,當(dāng)然也可以跟版本號(hào)碼,git reset --hard 3628164 只需要前幾位可以匹配到就可以了。
    --git reflog 如果你實(shí)在找不到版本,可以使用這個(gè)命令來(lái)找所有你輸入的命令。
  2. git checkout --文件.后綴 ,指的是文件在工作區(qū)的修改全部撤銷
  3. git reset HEAD file可以把暫存區(qū)的修改撤銷掉(unstage),重新放回工作區(qū),當(dāng)我們用HEAD時(shí),表示最新的版本。
  4. rm test.txt 刪除文件test.txt,下面如果你確實(shí)要在版本庫(kù)里面刪掉就執(zhí)行
    git rm test.txt,然后git commit -m "remove test.txt"。提交,如果刪錯(cuò)了可以從版本庫(kù)里面提取git checkout -- test.txt

創(chuàng)建SSH Key
由于你的本地Git倉(cāng)庫(kù)和GitHub倉(cāng)庫(kù)之間的傳輸是通過(guò)SSH加密的,所以,需要設(shè)置ssh key來(lái)建立兩者之間的聯(lián)系。
ssh-keygen -t rsa -C "賬號(hào)"
你需要把郵件地址換成你自己的郵件地址,然后一路回車(chē),使用默認(rèn)值即可,由于這個(gè)Key也不是用于軍事目的,所以也無(wú)需設(shè)置密碼。

如果一切順利的話,可以在用戶主目錄里找到.ssh目錄,里面有id_rsa和id_rsa.pub兩個(gè)文件,這兩個(gè)就是SSH Key的秘鑰對(duì),id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。

第2步:登陸GitHub,打開(kāi)“Account settings”,“SSH Keys”頁(yè)面:

然后,點(diǎn)“Add SSH Key”,填上任意Title,在Key文本框里粘貼id_rsa.pub文件的內(nèi)容:

  1. 建立與遠(yuǎn)程倉(cāng)庫(kù)的鏈接
    git remote add origin git@github.com:michaelliao/learngit.git
    添加后,遠(yuǎn)程庫(kù)的名字就是origin,這是Git默認(rèn)的叫法,也可以改成別的,但是origin這個(gè)名字一看就知道是遠(yuǎn)程庫(kù)
    下一步,就可以把本地庫(kù)的所有內(nèi)容推送到遠(yuǎn)程庫(kù)上
    git push -u origin master
    把本地庫(kù)的內(nèi)容推送到遠(yuǎn)程,用git push命令,實(shí)際上是把當(dāng)前分支master推送到遠(yuǎn)程。

由于遠(yuǎn)程庫(kù)是空的,我們第一次推送master分支時(shí),加上了-u參數(shù),Git不但會(huì)把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支,還會(huì)把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來(lái),在以后的推送或者拉取時(shí)就可以簡(jiǎn)化命令。

  1. git clone 地址 在本地克隆一個(gè)遠(yuǎn)程倉(cāng)庫(kù)

13.git checkout -b dev 創(chuàng)建分支dev,git checkout命令加上-b參數(shù)表示創(chuàng)建并切換,相當(dāng)于以下兩條命令:

$ git branch dev
$ git checkout dev
Switched to branch 'dev'

然后,用git branch命令查看當(dāng)前分支:

$ git branch
* dev
  master

當(dāng)我們?yōu)橥瓿蒬ev的開(kāi)發(fā)任務(wù)之后,我們開(kāi)始進(jìn)行合并到master分支中:

$ git merge dev
Updating d17efd8..fec145a
Fast-forward
 readme.txt |    1 +
 1 file changed, 1 insertion(+)
  1. git merge命令用于合并指定分支到當(dāng)前分支。合并后,再查看readme.txt的內(nèi)容,就可以看到,和dev分支的最新提交是完全一樣的。
    注意到上面的Fast-forward信息,Git告訴我們,這次合并是“快進(jìn)模式”,也就是直接把master指向dev的當(dāng)前提交,所以合并速度非??臁?br> 當(dāng)然,也不是每次合并都能Fast-forward,我們后面會(huì)講其他方式的合并。
    合并完成后,就可以放心地刪除dev分支了:
$ git branch -d dev
Deleted branch dev (was fec145a).

關(guān)于分支這塊的小結(jié):

查看分支:git branch

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

切換分支:git checkout <name>

創(chuàng)建+切換分支:git checkout -b <name>

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

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

  1. 合并分支遇到?jīng)_突,遇到?jīng)_突時(shí)候本地的沖突文件就會(huì)有亂碼的地方,把亂碼沖突的部分給處理好,重新add,commit即可
    解決之后可以使用git log來(lái)查看分支合并的情況。
    git log --graph --pretty=oneline --abbrev-commit

16.用git log --graph命令可以看到分支合并圖。

17.通常,合并分支時(shí),如果可能,Git會(huì)用Fast forward模式,但這種模式下,刪除分支后,會(huì)丟掉分支信息。
如果要強(qiáng)制禁用Fast forward模式,Git就會(huì)在merge時(shí)生成一個(gè)新的commit,這樣,從分支歷史上就可以看出分支信息。
下面我們實(shí)戰(zhàn)一下--no-ff方式的git merge

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
 readme.txt |    1 +
 1 file changed, 1 insertion(+)

合并分支時(shí),加上--no-ff參數(shù)就可以用普通模式合并,合并后的歷史有分支,能看出來(lái)曾經(jīng)做過(guò)合并,而fast forward合并就看不出來(lái)曾經(jīng)做過(guò)合并。

關(guān)于bug分支


  1. git stash功能,可以把當(dāng)前工作現(xiàn)場(chǎng)“儲(chǔ)藏”起來(lái),等以后恢復(fù)現(xiàn)場(chǎng)后繼續(xù)工作。比如需要新開(kāi)分支修改bug的時(shí)候,但是當(dāng)前的分支還沒(méi)有完成提交,這個(gè)時(shí)候就可以使用git stash暫存然后做修改bug的事情。
    那么當(dāng)我們完成其他分支工作這時(shí)需要回到之前分支時(shí)候該怎么處理呢?
    當(dāng)我們切回分支時(shí)候,發(fā)現(xiàn)工作區(qū)是干凈的,剛才的工作現(xiàn)場(chǎng)存到哪去了?用git stash list命令看看:
 git stash list
stash@{0}: WIP on dev: 6224937 add merge

工作現(xiàn)場(chǎng)還在,Git把stash內(nèi)容存在某個(gè)地方了,但是需要恢復(fù)一下,有兩個(gè)辦法:

一是用git stash apply恢復(fù),但是恢復(fù)后,stash內(nèi)容并不刪除,你需要用git stash drop來(lái)刪除;
另一種方式是用git stash pop,恢復(fù)的同時(shí)把stash內(nèi)容也刪了
你可以多次stash,恢復(fù)的時(shí)候,先用git stash list查看,然后恢復(fù)指定的stash,用命令:
$ git stash apply stash@{0}

關(guān)于Feature分支


軟件開(kāi)發(fā)中,總有無(wú)窮無(wú)盡的新的功能要不斷添加進(jìn)來(lái)。

添加一個(gè)新功能時(shí),你肯定不希望因?yàn)橐恍?shí)驗(yàn)性質(zhì)的代碼,把主分支搞亂了,所以,每添加一個(gè)新功能,最好新建一個(gè)feature分支,在上面開(kāi)發(fā),完成后,合并,最后,刪除該feature分支。

  1. git branch -d feature-vulcan 強(qiáng)制刪除
    當(dāng)我們新功能分支開(kāi)發(fā)完畢準(zhǔn)備合并,但是突然因?yàn)樾枨髥?wèn)題不想要了,要?jiǎng)h除,發(fā)現(xiàn)使用-d是會(huì)報(bào)錯(cuò)無(wú)法刪除的,這個(gè)時(shí)候就可以使用強(qiáng)制刪除命令來(lái)刪除分支。

其他的命令


  1. 要查看遠(yuǎn)程庫(kù)的信息,用git remote,或者,用git remote -v顯示更詳細(xì)的信息

21.推送分支
推送分支,就是把該分支上的所有本地提交推送到遠(yuǎn)程庫(kù)。推送時(shí),要指定本地分支,這樣,Git就會(huì)把該分支推送到遠(yuǎn)程庫(kù)對(duì)應(yīng)的遠(yuǎn)程分支上:
$ git push origin master
如果要推送其他分支,比如dev,就改成:
$ git push origin dev

最后編輯于
?著作權(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),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Git常用語(yǔ)法 [TOC] Git簡(jiǎn)介 描述 ? Git(讀音為/g?t/。)是一個(gè)開(kāi)源的分布式版本控制系統(tǒng),...
    君惜丶閱讀 3,937評(píng)論 0 13
  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,852評(píng)論 9 163
  • 世人謗我、欺我、辱我、笑我、輕我、賤我、惡我、騙我、如何處治乎?拾得云:只是忍他、讓他、由他、避他、敬他、不要理他...
    吟因閱讀 668評(píng)論 0 1
  • 2017年3月15日 星期三 “育心麗謙?時(shí)間管理100天挑戰(zhàn)營(yíng)”第60天 【早起】5:10 【日記】 昨晚3點(diǎn)左...
    歸零2017閱讀 219評(píng)論 0 0
  • 林倩一直在反思,如果當(dāng)年自己不逼著老公祥子出去打工,把兒子扔給婆婆,那現(xiàn)在她們的日子雖然窮點(diǎn),但卻一定是和諧安康吧...
    亦為清心閱讀 880評(píng)論 11 7

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