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

關(guān)于git要講明白的東西:工作區(qū)竖慧、暫存區(qū)、本地倉庫鸽疾、分支(時間線)吊洼、HEAD、遠(yuǎn)程倉庫及別名

git與github:

git:就是一個分布式版本控制系統(tǒng)制肮,github是一個為用戶提供git服務(wù)的一個網(wǎng)站(線上代碼倉庫:gitee或者gitlab)冒窍。
git:本地倉庫
github:在線倉庫

在github上創(chuàng)建倉庫之后,可以將此倉庫clone到本地豺鼻,或者將本地的倉庫關(guān)聯(lián)并push上去综液。
關(guān)聯(lián):

1.在本地目錄下關(guān)聯(lián)遠(yuǎn)程repository :

git remote add origin(遠(yuǎn)程鏈接名) 項目地址
建立連接之后,第一次使用pull的時候:git pull origin dev
第一次使用push:git push --set-upstream origin dev
git rebase origin dev 把多分支線整理成一條

2.取消本地目錄下關(guān)聯(lián)的遠(yuǎn)程庫:

git remote remove origin(鏈接遠(yuǎn)程倉庫的名字)
克隆到本地:git clone 項目地址
克隆指定分支:git clone -b +分支 + 地址

IDE使用git:

如果在一個項目中執(zhí)行g(shù)it init被git管理儒飒,就可以在IDE中看到git選項谬莹,使用add和commit,可以在IDE里面直接管理這個倉庫(項目)的分支名桩了,管理remote遠(yuǎn)程倉庫的別名附帽,后面是push上遠(yuǎn)程庫(遠(yuǎn)程倉庫的名字可以和項目名不一致,最好一致)之后顯示的是分支名井誉。

gitlab:可以自己搭建的遠(yuǎn)程倉庫

可以為每個項目添加成員蕉扮,也就是權(quán)限管理
別人push上的更新,可以將更新pull下來颗圣,push和pull都會顯示分支名和成員喳钟。
初次使用需要在上面創(chuàng)建項目屁使,可以將上面的項目clone到本地,或者將本地的項目完整push上去奔则。

git:工作區(qū)--暫存區(qū)--本地倉庫(分支版本庫)---->git遠(yuǎn)程倉庫

git命令和Linux命令使用類似:
設(shè)置用戶名及郵箱:git config --global user.name ""
git config --global user.email ""
創(chuàng)建倉庫:mikdir蛮寂、cd
初始化倉庫:git init
git add 文件多個文件 .(所有)
git commit -m "注釋"
查看倉庫的當(dāng)前狀態(tài):git status
查看更改文件的內(nèi)容:git diff
撤回工作區(qū)最近一次的修改:git checkout -- readme.txt --后面是有空格的
將暫存區(qū)的修改回退到工作區(qū):git reset HEAD readme.txt HEAD大寫
也可以使用下面git status 提示的命令:


G

獲取版本號:git log、簡化顯示:git log --pretty=oneline
回退:git reset --hard 版本號
獲取版本號:git reflog
克隆到本地:git clone 倉庫地址
推上:git push
使用ssh連接:復(fù)制本機(jī)公鑰到github上保存
拉纫撞纭:git pull

注意:修改文件內(nèi)容之后可以直接push酬蹋,
但是回退版本之后不行,需要開啟強(qiáng)制push:git push -f origin dev

關(guān)于reset和revert的原理:
git每次commit提交抽莱,都會自動把它們串成一條時間線除嘹,這條時間線就是一個分支,默認(rèn)是主分支master岸蜗,HEAD指針指向當(dāng)前在使用的分支的最新版本,使用reset就是更改HEAD指向之前的版本叠蝇,遺棄的版本 但是使用git reflog還是能夠看到左右的版本璃岳,因為git底層會記錄你每一次關(guān)于版本的操作。使用revert就是不改變原來的版本悔捶,新建立一個版本(回退到你指定的版本 不改變此版本后的版本)铃慷。

git revert -n 版本號

適用場景: 如果我們想撤銷之前的某一版本,但是又想保留該目標(biāo)版本后面的版本蜕该,記錄下這整個版本變動流程犁柜,就可以用這種方法。

git reset --hard 目標(biāo)版本號

此時如果用“git push”會報錯堂淡,因為我們本地庫HEAD指向的版本比遠(yuǎn)程庫的要舊馋缅,

要使用git push -f”強(qiáng)制推上去

分支:git branch 查看所有分支

創(chuàng)建:git branch 分支名

切換到分支:git checkout 分支名

創(chuàng)建并切換分支:git checkout -b dev 、 git switch -c dev

刪除分支:git branch -d 分支名 需要不在此分支下

合并分支 :gir merge dev(分支名) --注意:這是合并到dev分支下

分支策略

在實際開發(fā)中绢淀,我們應(yīng)該按照幾個基本原則進(jìn)行分支管理:

首先萤悴,master分支應(yīng)該是非常穩(wěn)定的,也就是僅用來發(fā)布新版本皆的,平時不能在上面干活覆履;

那在哪干活呢?干活都在dev分支上费薄,也就是說硝全,dev分支是不穩(wěn)定的,到某個時候楞抡,比如1.0版本發(fā)布時伟众,再把dev分支合并到master上,在master分支發(fā)布1.0版本拌倍;

你和你的小伙伴們每個人都在dev分支上干活赂鲤,每個人都有自己的分支噪径,時不時地往dev分支上合并就可以了。

所以数初,團(tuán)隊合作的分支看起來就像這樣:

image.jpeg

--no-ff方式的合并分支:

git merge --no-ff -m "merge with no-ff" dev

Git分支十分強(qiáng)大找爱,在團(tuán)隊開發(fā)中應(yīng)該充分應(yīng)用。

合并分支時泡孩,加上--no-ff參數(shù)就可以用普通模式合并车摄,合并后的歷史有分支,能看出來曾經(jīng)做過合并仑鸥,而默認(rèn)fast forward合并就看不出來曾經(jīng)做過合并吮播。

Bug分支:

并不是你不想提交,而是工作只進(jìn)行到一半眼俊,還沒法提交意狠,預(yù)計完成還需1天時間。但是疮胖,必須在兩個小時內(nèi)修復(fù)該bug环戈,怎么辦?

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

git stash

首先確定要在哪個分支上修復(fù)bug性昭,假定需要在master分支上修復(fù)拦止,就從master創(chuàng)建臨時分支:git checkout -b issue-101

現(xiàn)在修復(fù)bug,需要把“Git is free software ...”改為“Git is a free software ...”糜颠,然后提交:

修復(fù)完成后汹族,切換到master分支,并完成合并括蝠,最后刪除issue-101分支:

git switch master

git merge --no-ff -m "merged bug fix 101" issue-101

當(dāng)手頭工作沒有完成時鞠抑,先把工作現(xiàn)場git stash一下,然后去修復(fù)bug忌警,修復(fù)后搁拙,再git stash pop,回到工作現(xiàn)場法绵;

更改提交之后會有一個當(dāng)前分支下的修改版本號生成箕速。

[圖片上傳中...(image-c97c2f-1617158140875-0)]

feature分支:用于開發(fā)臨時新上線的功能

開發(fā)一個新feature,最好新建一個分支朋譬;

如果要丟棄一個沒有被合并過的分支盐茎,可以通過git branch -D <name>強(qiáng)行刪除。

多人協(xié)作:

  • 查看遠(yuǎn)程庫信息徙赢,使用git remote -v字柠;
  • 本地新建的分支如果不推送到遠(yuǎn)程探越,對其他人就是不可見的;
  • 從本地推送分支窑业,使用git push origin branch-name钦幔,如果推送失敗,先用git pull抓取遠(yuǎn)程的新提交常柄;
  • 在本地創(chuàng)建和遠(yuǎn)程分支對應(yīng)的分支鲤氢,使用git checkout -b branch-name origin/branch-name,本地和遠(yuǎn)程分支的名稱最好一致西潘;
  • 建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián)卷玉,使用git branch --set-upstream branch-name origin/branch-name;
  • 從遠(yuǎn)程抓取分支喷市,使用git pull相种,如果有沖突,要先處理沖突品姓。

沖突解決:

嘗試合并蚂子,gir merge dev(分支名)
查看狀態(tài):git status
查看文件,手動修改沖突后解決
再次 add commit
查看合并情況:git log --graph --pretty=oneline --abbrev-commit

Rebase:

  • rebase操作可以把本地未push的分叉提交歷史整理成直線缭黔;
  • rebase的目的是使得我們在查看歷史提交的變化時更容易,因為分叉的提交需要三方對比蒂破。

標(biāo)簽管理:

所以馏谨,tag就是一個讓人容易記住的有意義的名字,它跟某個commit綁在一起附迷。

  • 命令git tag <tagname>用于新建一個標(biāo)簽惧互,默認(rèn)為HEAD,也可以指定一個commit id喇伯;

  • 命令git tag -a <tagname> -m "blablabla..."可以指定標(biāo)簽信息喊儡;

  • 命令git tag可以查看所有標(biāo)簽。

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

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

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

  • 命令git push origin :refs/tags/<tagname>可以刪除一個遠(yuǎn)程標(biāo)簽捻悯。

自定義GIt:

git config --global color.ui true 醒目顏色

忽略特殊文件:https://github.com/github/gitignore

  • 忽略某些文件時匆赃,需要編寫.gitignore;
  • .gitignore文件本身要放到版本庫里今缚,并且可以對.gitignore做版本管理算柳!

配置別名:git config --global alias.st status

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市姓言,隨后出現(xiàn)的幾起案子瞬项,更是在濱河造成了極大的恐慌蔗蹋,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囱淋,死亡現(xiàn)場離奇詭異猪杭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)绎橘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門胁孙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人称鳞,你說我怎么就攤上這事涮较。” “怎么了冈止?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵狂票,是天一觀的道長。 經(jīng)常有香客問我熙暴,道長闺属,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任周霉,我火速辦了婚禮掂器,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘俱箱。我一直安慰自己国瓮,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布狞谱。 她就那樣靜靜地躺著乃摹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪跟衅。 梳的紋絲不亂的頭發(fā)上孵睬,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機(jī)與錄音伶跷,去河邊找鬼掰读。 笑死,一個胖子當(dāng)著我的面吹牛叭莫,可吹牛的內(nèi)容都是我干的磷支。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼食寡,長吁一口氣:“原來是場噩夢啊……” “哼雾狈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起抵皱,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤善榛,失蹤者是張志新(化名)和其女友劉穎辩蛋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體移盆,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡悼院,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了咒循。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片据途。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖叙甸,靈堂內(nèi)的尸體忽然破棺而出颖医,到底是詐尸還是另有隱情,我是刑警寧澤裆蒸,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布熔萧,位于F島的核電站,受9級特大地震影響僚祷,放射性物質(zhì)發(fā)生泄漏佛致。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一辙谜、第九天 我趴在偏房一處隱蔽的房頂上張望俺榆。 院中可真熱鬧,春花似錦装哆、人聲如沸肋演。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蜕乡,卻和暖如春奸绷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背层玲。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工号醉, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辛块。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓畔派,卻偏偏與公主長得像,于是被迫代替她去往敵國和親润绵。 傳聞我的和親對象是個殘疾皇子线椰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

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