GIT

https://www.cnblogs.com/ximiaomiao/p/7140456.html

1.?

現(xiàn)在當(dāng)前文件夾創(chuàng)建readme.txt文件,進(jìn)行修改后。

git add <文件名>? ? ? ? ? ? ? //比如? git add readme.txt? ? ? 會(huì)更新

git commit -m <備注說(shuō)明>? ? //? 比如? git commit -m "添加了readme.txt"? ? ? ? 會(huì)提交修改后的文件


2.?

再次編輯readme.txt? 在句末加入!!!

git status? ? //會(huì)顯示哪些文件被修改了


readme.txt被修改


git diff readme.txt? ? ? //顯示具體修改了什么


-hello world表示原來(lái)沒(méi)被修改前的句子。 +hello world !!!表示被修改后的句子

修改后 再次

git add readme.txt?

git commit -m "balabala"

3.

git log? ? //查看commit提交記錄


一長(zhǎng)串的commit id(版本號(hào)) 用來(lái)記錄該次commit的id號(hào),回退時(shí)經(jīng)常用到,


4. 版本回退

HEAD表示當(dāng)前版本 HEAD^表示上個(gè)版本 HEAD^^上上個(gè)版本

HEAD始終指向一個(gè)當(dāng)前分支(正在操作的分支),比如master ,dev等

git reset --hard 1049a? ? //指定到版本號(hào)前幾位是1049a的版本 具體取幾位隨意 git log查看版本號(hào)

git reset --hard HEAD^? ? //退回到上個(gè)版本

git relog? //查看歷史版本號(hào) 即使關(guān)機(jī)再打開(kāi)也能顯示 這樣回退之后后悔了,可以查看沒(méi)回退的時(shí)候是什么版本號(hào)


5.工作區(qū)和暫存區(qū)

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013745374151782eb658c5a5ca454eaa451661275886c6000

git add file.txt? 負(fù)責(zé)把對(duì)file.txt做出的修改提交到緩存區(qū)(index),而不是把文件提交。

git commit? 負(fù)責(zé)把緩存區(qū)的內(nèi)容交給分支。

如果對(duì)文件修改后只commit 而不add 則實(shí)際上沒(méi)有成功提交修改。因?yàn)榫彺鎱^(qū)的內(nèi)容空的。

6.撤銷(xiāo)操作

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374831943254ee90db11b13d4ba9a73b9047f4fb968d000

git checkout -- file.txt? ? ? ? //撤銷(xiāo)對(duì)工作區(qū)文件file.txt的修改

如果文件已經(jīng)提交到緩存區(qū)

git reset HEAD file.txt? ? //撤銷(xiāo)把文件add進(jìn)緩存區(qū)的操作

再 git checkout --file.txt 撤銷(xiāo)工作區(qū)對(duì)文件的修改


7.刪除文件

工作區(qū)的文件可以直接刪除,若還要?jiǎng)h除版本庫(kù)的文件

用 git rm file.txt? ?

再 git commit -m "刪除了file.txt文件"


如果誤刪了工作區(qū)文件 可以 git checkout --file.txt? 即把版本庫(kù)的file.txt文件送到工作區(qū)


8.? 給github添加ssh key? 和? 新建遠(yuǎn)程倉(cāng)庫(kù)

push命令:$ git push <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名>

將現(xiàn)有倉(cāng)庫(kù)推送到遠(yuǎn)程倉(cāng)庫(kù)

git remote add origin https://github.com/cdatm/test_git_work.git? ? //origin是遠(yuǎn)程倉(cāng)庫(kù)名稱(chēng)

或者使用? git remote add origin git@github.com:cdatm/test_git_work.git? //使用的ssh協(xié)議 比https的更快

git push -u origin master? ? //將本地的master分支推送到origin主機(jī),-u參數(shù) 指定origin為默認(rèn)主機(jī),后面就可以不? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //加任何參數(shù)使用git push了

git push origin master:ppt? //將本地分支master推送到遠(yuǎn)程倉(cāng)庫(kù),給對(duì)應(yīng)的遠(yuǎn)程分支取名為ppt

git push origin :ppt? //推送空的本地分支到遠(yuǎn)程分支ppt ,即刪除ppt分支


當(dāng)多人合作時(shí),隨著其他人的提交,遠(yuǎn)程分支的commit進(jìn)度和本地的可能不一樣。注意最初克隆時(shí)會(huì)在本地產(chǎn)生一個(gè)origin/master分支,不可改動(dòng),始終指向克隆那一刻的遠(yuǎn)程倉(cāng)庫(kù)的master指向的commit。


進(jìn)度不一樣

可以運(yùn)行 git fetch origin 來(lái)同步遠(yuǎn)程服務(wù)器上的數(shù)據(jù)到本地。該命令首先找到 origin 是哪個(gè)服務(wù)器(本例為 git.ourcompany.com),從上面獲取你尚未擁有的數(shù)據(jù),更新你本地的數(shù)據(jù)庫(kù),然后把 origin/master 的指針移到它最新的位置上


git fetch //根據(jù)遠(yuǎn)程倉(cāng)庫(kù) 更新所有本地分支

git fetch origin master // 將origin上的master分支更新到本地分支上,即會(huì)在本地更新origin/master分支

更新后為了在origin/master基礎(chǔ)上開(kāi)發(fā) 可以新建本地分支

git checkout -b dev1 origin/master

或者直接合并

git merge origin/master


9.遠(yuǎn)程克隆

把遠(yuǎn)程的庫(kù)克隆到本地倉(cāng)庫(kù)

git clone git@github.com:cdatm/git_clone_test.git? //這樣本地目錄就會(huì)存在一個(gè)git_clone_test庫(kù)

或者 git clone https://github.com/cdatm/git_clone_test.git?


一次 Git 克隆會(huì)建立你自己的本地分支 master 和遠(yuǎn)程分支 origin/master,并且將它們都指向 origin 上的 master 分支。但不能修改本地的遠(yuǎn)程分支origin/master .

10.分支管理

(1)創(chuàng)建合并分支

? ? 分支就是指針,始終指向提交(commit),可以創(chuàng)建多個(gè)分支(指針),每次操作其中一個(gè)分支,比如dev,

注意HEAD始終指向正在被操作的分支,當(dāng)dev不斷commit時(shí),dev不斷前進(jìn),其他分支還留在原地。


master,dev分別在舊的,新的提交點(diǎn)。新提交點(diǎn)作出的改動(dòng),舊提交點(diǎn)不能得知

創(chuàng)建:

git checkout -b dev? ? //-b參數(shù) 會(huì)創(chuàng)建并切換到新分支

或者

git branch dev? ? //創(chuàng)建dev分支

git checkout dev? ? //切換到dev


查看的當(dāng)前分支:

git branch

假設(shè)dev分支add并commit了 file.txt? ,dev時(shí)間線就領(lǐng)先于master ,為了讓master趕上進(jìn)度,需要合并

git checkout master? //先切換到master

git merge dev? //將dev分支的工作成果合并到當(dāng)前分支上


刪除分支

git branch -d dev

Git鼓勵(lì)你使用分支完成某個(gè)任務(wù),合并后再刪掉分支,這和直接在master分支上工作效果是一樣的,但過(guò)程更安全。


(2)解決沖突

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840202368c74be33fbd884e71b570f2cc3c0d1dcf000

(3)保留分支歷史的合并,即不使用默認(rèn)的fast forward合并

git merge --no-ff -m "no fast forward merge" dev?

Git會(huì)在merge時(shí)生成一個(gè)新的commit(所以要-m說(shuō)明一下),這樣從分支歷史上就可以看出分支信息。

新生成的commit可以理解為一個(gè)結(jié)點(diǎn),當(dāng)前分支(比如master)指向它,而被合并的分支(比如dev)不會(huì)被刪除。

fast forward合并則是讓當(dāng)前分支指向被合并的分支所在commit(結(jié)點(diǎn)),然后被合并的分支就相當(dāng)于從來(lái)沒(méi)存在過(guò)。


master現(xiàn)在所指commit為新建的



(4)bug的修補(bǔ)策略

git stash? ?

會(huì)保存當(dāng)前分支工作環(huán)境(入棧),如果stash之前有未commit的文件,stash之后將不會(huì)提示你,因?yàn)樵h(huán)境相當(dāng)于被封存了。

注:stash只能保存那些已經(jīng)被追蹤(add)過(guò)的文件,所以stash之前一定要 git add

git stash list? 查看有多少被stash的分支。

進(jìn)行恢復(fù)

git stash apply? //恢復(fù)棧頂?shù)沫h(huán)境

git stash drop? //刪除棧頂

或者

git stash pop? //恢復(fù)并刪除棧頂


設(shè)A為游戲軟件

1、master 上面發(fā)布的是A的1.0版本

2、dev 上開(kāi)發(fā)的是A的2.0版本

3、這時(shí),用戶(hù)反映 1.0版本存在漏洞,有人利用這個(gè)漏洞開(kāi)外掛

4、需要從dev切換到master去填這個(gè)漏洞,正常必須先提交dev目前的工作,才能切換。

5、而dev的工作還未完成,不想提交,所以先把dev的工作stash一下。然后切換到master

6、在master建立分支bugfix并切換.

7、在bugfix上修復(fù)漏洞。

8、修復(fù)后,在master上合并bugfix

9、切回dev,恢復(fù)原本工作,繼續(xù)工作。

(5)多人協(xié)作模式

git checkout -b branch_name origin/branch_name

創(chuàng)建一個(gè)本地分支branch_name ,它與遠(yuǎn)程分支branch_name進(jìn)度相同

git pull 相當(dāng)于git fetch +git merge

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

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

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

? ? 沒(méi)有沖突或者解決掉沖突后,再用git push origin <branch-name>推送就能成功!

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


查看遠(yuǎn)程庫(kù)信息,使用git remote -v;

本地新建的分支如果不推送到遠(yuǎn)程,對(duì)其他人就是不可見(jiàn)的;

從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠(yuǎn)程的新提交;

在本地創(chuàng)建和遠(yuǎn)程分支對(duì)應(yīng)的分支,使用git checkout -b branch-name origin/branch-name,本地和遠(yuǎn)程分支的名稱(chēng)最好一致;

建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián),使用git branch --set-upstream branch-name origin/branch-name;

從遠(yuǎn)程抓取分支,使用git pull,如果有沖突,要先處理沖突。


(6)rebase


11.標(biāo)簽管理

tag指向某個(gè)commit 類(lèi)似于分支 但不能移動(dòng)。tag和commit id的關(guān)系類(lèi)似于dns和ip的關(guān)系。方便記憶

(1)創(chuàng)建標(biāo)簽

git tag? <tagname>

如git tag v1.0

默認(rèn)對(duì)當(dāng)前commit創(chuàng)建tag?

也可以指定commit創(chuàng)建tag

git tag? <tagname>? <commit id>

如git tag v0.9 fe305b


git tag? 查看所有標(biāo)簽 按字母順序排序


git tag -a <tag name>? -m "說(shuō)明"? <commit id>

-a 指定標(biāo)簽名? -m添加說(shuō)明


git show <tag name>? 顯示某個(gè)標(biāo)簽的信息


(2)刪除 推送標(biāo)簽

命令git push origin <tagname>可以推送一個(gè)本地標(biāo)簽;

命令git push origin --tags可以推送全部未推送過(guò)的本地標(biāo)簽;

命令git tag -d <tagname>可以刪除一個(gè)本地標(biāo)簽;

命令git push origin :refs/tags/<tagname>可以刪除一個(gè)遠(yuǎn)程標(biāo)簽。即推送一個(gè)本地的空標(biāo)簽

最后編輯于
?著作權(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)容

  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git,從https:/...
    落魂灬閱讀 12,839評(píng)論 4 54
  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,852評(píng)論 9 163
  • Git常用語(yǔ)法 [TOC] Git簡(jiǎn)介 描述 ? Git(讀音為/g?t/。)是一個(gè)開(kāi)源的分布式版本控制系統(tǒng),...
    君惜丶閱讀 3,941評(píng)論 0 13
  • (預(yù)警:因?yàn)樵敿?xì),所以行文有些長(zhǎng),新手邊看邊操作效果出乎你的預(yù)料) 一:Git是什么? Git是目前世界上最先進(jìn)的...
    axiaochao閱讀 2,008評(píng)論 1 8
  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,872評(píng)論 1 26

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