Git學(xué)習(xí)

Git學(xué)習(xí)

1惰聂、初始化git倉庫

將一個目錄變成Git可以管理的倉庫 。

git init
2咱筛、添加指定文件到倉庫
git add <file>
3搓幌、提交文件到倉庫

提交文件到倉庫,并寫上本次提交備注迅箩。

git commit -m <message>
4溉愁、查看提交日志

查看提交日志,可以看到3次提交的日志饲趋,如果看的不清晰可以加上--pretty=oneline參數(shù)拐揭,想看合并圖加上--graph參數(shù)。

git log
5奕塑、回退
1堂污、回退版本

首先,Git必須知道當(dāng)前版本是哪個版本爵川,在Git中敷鸦,用HEAD表示當(dāng)前版本,也就是最新的提交寝贡,上一個版本就是HEAD^扒披,上上一個版本就是HEAD^^,當(dāng)然往上100個版本寫100個^比較容易數(shù)不過來圃泡,所以寫成HEAD~100碟案。

回退上一個版本:

git reset --hard HEAD^

回退指定版本:【1094a 版本號的一部分,沒必要寫全颇蜡,前幾位就可以了价说,Git會自動去找 】辆亏。

git reset --hard 1094a
2、回退暫存區(qū)【git add之后】的到工作區(qū)
git reset HEAD <file> 
6鳖目、查看歷史命令

查看歷史命令扮叨,以便確定要回到未來的哪個版本 。

git reflog
7领迈、查看當(dāng)前狀態(tài)
git status
8彻磁、對比區(qū)別

查看工作區(qū)和版本庫里面最新版本的區(qū)別 。

git diff HEAD -- <file>
9狸捅、撤銷

把文件在工作區(qū)的修改全部撤銷衷蜓,這里有兩種情況:

一種是文件自修改后還沒有被放到暫存區(qū)【git add之后】,現(xiàn)在尘喝,撤銷修改就回到和版本庫一模一樣的狀態(tài)磁浇。

一種是文件已經(jīng)添加到暫存區(qū)后【git add之后】,又作了修改朽褪,現(xiàn)在置吓,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)。

總之鞍匾,就是讓這個文件回到最近一次git commitgit add時的狀態(tài)交洗。

git checkout -- <file>命令中的--很重要,沒有--橡淑,就變成了切換到另一個分支的命令构拳。

git checkout -- <file>
10、刪除文件

如果手動將文件刪除梁棠,然后使用git rm <file>git add<file>效果是一樣的 【之前已經(jīng)提交的】置森。

git rm

假如刪錯了,因為版本庫里還有呢符糊,所以可以很輕松地把誤刪的文件恢復(fù)到最新版本凫海。

git checkout -- <file>
11、添加遠程倉庫

現(xiàn)在的情景是男娄,你已經(jīng)在本地創(chuàng)建了一個Git倉庫后行贪,又想在GitHub創(chuàng)建一個Git倉庫愕难,并且讓這兩個倉庫進行遠程同步岖常,這樣键兜,GitHub上的倉庫既可以作為備份末购。

首先,登陸GitHub笋庄,然后在右上角找到Create a new repo按鈕另凌,創(chuàng)建一個新的倉庫康吵。

Repository name填入demo实夹,其他保持默認設(shè)置橄浓。

點擊Create repository按鈕粒梦,就成功地創(chuàng)建了一個新的Git倉庫。

git remote add origin https://github.com/ffxnh/demo.git

git push -u origin master 【第一次推送`master`分支的所有內(nèi)容需要加`-u`,可能會讓你輸入`token`】

git push origin master 【此后荸实,每次本地提交后匀们,只要有必要,就可以使用命令推送最新修改】

Gitbub token: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泪勒,這個在右上角settings ---> Developer settings ---> Personal access tokens ---> New GitHub App

12昼蛀、刪除遠程倉庫

使用前宴猾,建議先用git remote -v查看遠程庫信息 圆存。

git remote -v
origin  https://github.com/ffxnh/demo.git (fetch)
origin  https://github.com/ffxnh/demo.git (push)

根據(jù)名字刪除git remote rm <name>,比如刪除origin,

git remote rm origin

注意:此處的刪除其實是解除了本地和遠程的綁定關(guān)系仇哆,并不是物理上刪除了遠程庫沦辙。遠程庫本身并沒有任何改動。要真正刪除遠程庫讹剔,需要登錄到GitHub油讯,在后臺頁面找到刪除按鈕再刪除。

13延欠、克隆遠程倉庫

https協(xié)議

git clone https://github.com/ffxnh/demo.git

git協(xié)議

git clone git@github.com:ffxnh/demo.git
14陌兑、創(chuàng)建與合并分支

我們創(chuàng)建dev分支,然后切換到dev分支由捎,git checkout -b <name>git switch -b <name>

git checkout -b dev 【`git switch -b dev`】

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

git branch dev
git checkout dev 【`git switch dev`】

查看當(dāng)前分支 , git branch命令會列出所有分支,當(dāng)前分支前面會標(biāo)一個*號狞玛。

git branch
* dev
  master

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

git merge dev
Updating b7e797b..78d5f19
Fast-forward
 test.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

注意到上面的Fast-forward信息软驰,Git告訴我們,這次合并是“快進模式”心肪,也就是直接把master指向dev的當(dāng)前提交锭亏,所以合并速度非常快

刪除分支git branch -d <name>硬鞍,如果該分支沒有被合并過慧瘤,使用git branch -D <name>刪除

git branch -d dev

注意:通常,合并分支時固该,如果可能锅减,Git會用Fast forward模式,但這種模式下蹬音,刪除分支后上煤,會丟掉分支信息。

如果要強制禁用Fast forward模式著淆,Git就會在merge時生成一個新的commit劫狠,這樣拴疤,從分支歷史上就可以看出分支信息。

git merge --no-ff -m "message" <name>

--no-ff參數(shù)独泞,表示禁用Fast forward呐矾,因為生成一個新的commit所以寫上信息

git merge --no-ff -m "merge with no-ff" dev
15、解決沖突
git merge feature1
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
第一行
dev提交的
<<<<<<< HEAD
master提交的
=======
feature1提交的
>>>>>>> feature1

需要手動解決懦砂, Git<<<<<<<蜒犯,=======>>>>>>>標(biāo)記出不同分支的內(nèi)容荞膘,我們修改如下后罚随,繼續(xù)提交

第一行
dev提交的
master提交的
feature1提交的

執(zhí)行git add <file>git commit - m "message"

git add test.txt

git commit -m "解決沖突"
16、解決BUG時羽资,當(dāng)前分支功能未完成淘菩,怎么辦

Git還提供了一個stash功能,可以把當(dāng)前工作現(xiàn)場“儲藏”起來屠升,等以后恢復(fù)現(xiàn)場后繼續(xù)工作

git stash

接下來應(yīng)該切換到master分支后潮改,新建并切換一個修改BUG的分支, 修復(fù)完成后,切換到master分支腹暖,并完成合并汇在,最后刪除bug分支

接下來繼續(xù)自己的工作,切換回工作分支脏答,例如:

git switch dev

查看狀態(tài)

git status

On branch dev
nothing to commit, working tree clean

發(fā)現(xiàn)是干凈的糕殉, 剛才的工作現(xiàn)場存到哪去了,執(zhí)行查看儲藏命令

git stash list
stash@{0}: WIP on dev: f52c633 add merge

此時需要恢復(fù)一下以蕴,有兩個辦法

一種是用git stash apply恢復(fù)糙麦,但是恢復(fù)后,stash內(nèi)容并不刪除丛肮,你需要用git stash drop來刪除赡磅。

一種是方式是用git stash pop,恢復(fù)的同時把stash內(nèi)容也刪了

你可以多次stash宝与,恢復(fù)的時候焚廊,先用git stash list查看,然后恢復(fù)指定的stash习劫,然后再刪除

git stash apply stash@{0}

git stash drop stash@{0}

注意:在master分支上修復(fù)了BUG后咆瘟,我們要想一想,dev分支是早期從master分支分出來的诽里,所以袒餐,這個BUG其實在當(dāng)前dev分支上也存在。

git cherry-pick命令的作用,就是將指定的提交【commit】應(yīng)用于其他分支灸眼, 不一定是提交的哈希值卧檐,分支名也是可以的,隨后會自動給當(dāng)前分支做了一次提交 焰宣。

 git cherry-pick 4c805e2
17霉囚、多人遠程協(xié)作

查看遠程信息

git remote

origin

顯示更詳細的信息

git remote -v

origin  git@github.com:michaelliao/learngit.git (fetch)
origin  git@github.com:michaelliao/learngit.git (push)

從本地推送分支git push origin <branch-name>,如果推送失敗匕积,先用git pull拉取遠程的最新提交

git push origin master

在本地創(chuàng)建和遠程分支對應(yīng)的分支【本地和遠程分支的名稱最好一致】

git checkout -b branch-name origin/branch-name

建立本地分支和遠程分支的關(guān)聯(lián)

git branch --set-upstream branch-name origin/branch-name

多人協(xié)作的工作模式通常是這樣

首先盈罐,可以試圖用git push origin branch-name推送自己的修改。

如果推送失敗闪唆,則因為遠程分支比你的本地更新盅粪,需要先用git pull拉去試圖合并。

如果合并有沖突苞氮,則解決沖突湾揽,并在本地提交。

沒有沖突或者解決掉沖突后笼吟,再用git push origin推送就能成功。

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

18诱告、標(biāo)簽管理

創(chuàng)建標(biāo)簽 git tag <name>

git tag v1.0

查看所有標(biāo)簽

git tag

v1.0

標(biāo)簽總是和某個commit掛鉤撵枢。如果這個commit既出現(xiàn)在master分支,又出現(xiàn)在dev分支精居,那么在這兩個分支上都可以看到這個標(biāo)簽锄禽。

標(biāo)簽不是按時間順序列出,而是按字母排序的靴姿∥值可以用git show查看標(biāo)簽信息

默認標(biāo)簽是打在最新提交的commit上的。有時候佛吓,如果忘了打標(biāo)簽 宵晚,在打標(biāo)簽的時候帶上commit id

git tag v0.9 f52c633

創(chuàng)建帶有說明的標(biāo)簽 git tag -a <tagname> -m "blablabla..."s

git tag -a v0.1 -m "message" 1094adb

刪除一個本地標(biāo)簽

git tag -d <tagname>

刪除一個遠程標(biāo)簽

git push origin :refs/tags/<tagname>

推送一個本地標(biāo)簽

git push origin <tagname>

推送全部未推送過的本地標(biāo)簽

git push origin --tags
19、忽略文件

在倉庫目錄下新建忽略文件.gitignore

GitHub已經(jīng)為我們準備了各種配置文件维雇,只需要組合一下就可以使用了淤刃,gitignore配置

想添加一個文件到Git,但發(fā)現(xiàn)添加不了吱型,原因是這個文件被.gitignore忽略了逸贾,這個時候你可以強制提交

git add -f App.class

或者你發(fā)現(xiàn),可能是.gitignore寫得有問題,需要找出來到底哪個規(guī)則寫錯了铝侵,可以用git check-ignore命令檢查

git check-ignore -v App.class

.gitignore:3:*.class    App.class 【`.gitignore`的第`3`行規(guī)則忽略了該文件掂名,】

如果想把指定文件排除在.gitignore規(guī)則外,用!

# 排除所有.開頭的隱藏文件:
.*
# 排除所有.class文件:
*.class

# 不排除.gitignore和App.class:
!.gitignore
!App.class
20哟沫、配置別名

--global參數(shù)是全局參數(shù)饺蔑,也就是這些命令在這臺電腦的所有Git倉庫下都有用

例如

git config --global alias.st status
git config --global alias.ci commit

git config --global alias.unstage 'reset HEAD'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

以后就可以寫成

git st
git ci -m "message"

git unstage test.txt
git lg

配置Git的時候,加上--global是針對當(dāng)前用戶起作用的嗜诀,如果不加猾警,那只針對當(dāng)前的倉庫起作用。

每個倉庫的Git配置文件都放在.git/config文件中

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = git@github.com:michaelliao/learngit.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[alias]
    last = log -1

別名就在[alias]后面隆敢,要刪除別名发皿,直接把對應(yīng)的行刪掉即可。

而當(dāng)前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig

[alias]
    co = checkout
    ci = commit
    br = branch
    st = status
[user]
    name = Your Name
    email = your@email.com
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拂蝎,一起剝皮案震驚了整個濱河市穴墅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌温自,老刑警劉巖玄货,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異悼泌,居然都是意外死亡松捉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門馆里,熙熙樓的掌柜王于貴愁眉苦臉地迎上來隘世,“玉大人,你說我怎么就攤上這事鸠踪”撸” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵营密,是天一觀的道長械媒。 經(jīng)常有香客問我,道長卵贱,這世上最難降的妖魔是什么滥沫? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮键俱,結(jié)果婚禮上兰绣,老公的妹妹穿的比我還像新娘。我一直安慰自己编振,他們只是感情好缀辩,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布臭埋。 她就那樣靜靜地躺著,像睡著了一般臀玄。 火紅的嫁衣襯著肌膚如雪瓢阴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天健无,我揣著相機與錄音荣恐,去河邊找鬼。 笑死累贤,一個胖子當(dāng)著我的面吹牛叠穆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播臼膏,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼硼被,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了渗磅?” 一聲冷哼從身側(cè)響起嚷硫,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎始鱼,沒想到半個月后仔掸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡风响,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年嘉汰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片状勤。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖双泪,靈堂內(nèi)的尸體忽然破棺而出持搜,到底是詐尸還是另有隱情,我是刑警寧澤焙矛,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布葫盼,位于F島的核電站,受9級特大地震影響村斟,放射性物質(zhì)發(fā)生泄漏贫导。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一蟆盹、第九天 我趴在偏房一處隱蔽的房頂上張望孩灯。 院中可真熱鬧,春花似錦逾滥、人聲如沸峰档。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽讥巡。三九已至掀亩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間欢顷,已是汗流浹背槽棍。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留抬驴,地道東北人炼七。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像怎爵,于是被迫代替她去往敵國和親特石。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容