Git:二

Git基礎(chǔ)

通過(guò)上一篇Git:一文章伺帘,我們大體了解了創(chuàng)建倉(cāng)庫(kù)卒密,提交代碼等相關(guān)流程庇谆,本篇重點(diǎn)介紹git相關(guān)的基礎(chǔ)操作岳掐。

git init 初始化倉(cāng)庫(kù)

創(chuàng)建一個(gè)目錄,然后在該目錄下敲入初始化代碼:

mkdir gitDir    創(chuàng)建gitDir目錄
cd gitDir       跳轉(zhuǎn)到gitDir目錄
git init        初始化倉(cāng)庫(kù)
ls -a           查詢當(dāng)前目錄所有文件(包括隱藏文件)

生成的.git存儲(chǔ)當(dāng)前目錄內(nèi)容所需的倉(cāng)庫(kù)數(shù)據(jù)

git status 查看倉(cāng)庫(kù)狀態(tài)

輸入命令后顯示:


我們可以通過(guò)vi/touch 1.c在本目錄下新建1.c文件饭耳,也可以通過(guò)界面手動(dòng)新建該文件,再輸入 git status,則顯示:


通過(guò)rm -rf 1.c或手動(dòng)刪除后串述,又恢復(fù)之前沒(méi)有文件提交的狀態(tài)。

git add 向暫存區(qū)添加文件

暫存區(qū)是提交之前的一個(gè)臨時(shí)區(qū)域寞肖。通過(guò) git add 1.c 把1.c添加到暫存區(qū)纲酗,然后通過(guò) git status 查看:

git commit 保存?zhèn)}庫(kù)的歷史記錄

git commit -m "日志"
可以直接 git commit ,執(zhí)行后編輯器就會(huì)打開(kāi):


提交日志的格式如下:

   行數(shù) |      內(nèi)容    |
  -----: | :-------- 
  第一行  | 用一行文字簡(jiǎn)述提交的更改內(nèi)容 |
  |第二行  |        空格            |  
 | 第三行以后 | 記錄更改的原因和詳細(xì)內(nèi)容 |
dog bird cat
foo foo foo
bar bar bar
baz baz baz

如果不填,表示中斷提交

git log 查看提交日志

查看以往倉(cāng)庫(kù)中提交的日志


可以通過(guò) git log --pretty=short 顯示簡(jiǎn)短日志;
可以通過(guò) git log 目錄名/文件名 顯示對(duì)應(yīng)目錄名或文件名相關(guān)日志;
可以通過(guò) git log -p (文件名) 查看前后提交的差別

git diff 查看更改前后的差別

查看工作樹(shù)新蟆、暫存區(qū)觅赊、最新提交之間的差別
在1.c文件中添加 #include<stdio.h> 代碼保存后,然后輸入 git diff:


將1.c加入暫存區(qū)后再執(zhí)行 git diff 由于工作樹(shù)和暫存區(qū)之間并無(wú)差別琼稻,所以不會(huì)顯示什么結(jié)果吮螺。這時(shí)執(zhí)行 git diff HEAD 可以看到差異,HEAD 是指向當(dāng)前分支的最后一次提交的指針。

分支操作

master分支是Git默認(rèn)創(chuàng)建的分支规脸,所有的開(kāi)發(fā)都是以master分支為中心坯约。
分支可以使多人并行開(kāi)發(fā),最后與master分支合并莫鸭。

git branch 顯示分支


其中 * 表示當(dāng)前所在分支闹丐,現(xiàn)在只有一個(gè)master分支

git checkout -b 創(chuàng)建切換分支


我們創(chuàng)建了feature-A分支并且切換到該分支,現(xiàn)在我們有2個(gè)分支了被因。改代碼和下列代碼起到相同的效果:

git branch feature-A        //創(chuàng)建分支feature-A
git checkout feature-A       //切換到feature-A分支

下面通過(guò)feature-A分支中對(duì)1.c進(jìn)行編輯卿拴,如下:


添加了main函數(shù),接下來(lái)可通過(guò) git status git add 1.c git commit -m "add main method" 等相繼操作添加到feature-A中梨与。
通過(guò) git checkout master 切換到master中堕花,查看1.c文件是否有改動(dòng)。我們發(fā)現(xiàn)沒(méi)有改動(dòng)粥鞋,可見(jiàn)feature-A分支的變動(dòng)沒(méi)有影響主分支缘挽。
git checkout - 可以回到上一個(gè)分支

git merge 合并分支

先切換回master分支,通過(guò) git branch 查看現(xiàn)在在什么分支呻粹。

git merge --no-ff feature-A

--no-ff表示在歷史記錄中明確記錄下本次分支合并
如果合并出現(xiàn)沖突等壕曼,后續(xù)再說(shuō)怎么解決沖突。

git log --graph 圖表形式查看

具體可以在終端輸入看看等浊。

更改提交操作

git reset 回溯歷史版本


要讓暫存區(qū)腮郊、HEAD、當(dāng)前工作樹(shù)回溯到指定狀態(tài)筹燕,用 git reset --hard 指定時(shí)間的哈希值
通過(guò) git log 查找日志:

其中 commit 之后的一串字符就是哈希值

git reflog 當(dāng)前倉(cāng)庫(kù)執(zhí)行過(guò)的操作日志

git log 只能查看以當(dāng)前狀態(tài)為終點(diǎn)的歷史日志轧飞,而 git reflog 可以查看當(dāng)前倉(cāng)庫(kù)的日志:


只要不進(jìn)行垃圾回收(Garbage Collection),就可以通過(guò)日志調(diào)取近期的歷史狀態(tài)。其中前面黃色的字符串也是哈希值撒踪,哈希值只要輸入4位以上就可以了过咬。我們可以通過(guò)哈希值回到任何歷史狀態(tài)。

解決沖突

創(chuàng)建一個(gè)分支feature-B,然后修改1.c文件制妄,具體代碼為:

    git checkout -b feature-B  //創(chuàng)建feature-B分支
    
    //修改feature-B中1.c為:
    #include<stdio.h>
    int main(){
        printf("feature-B");
        return 0;
    }
    
    //修改master中1.c為:
    #include<stdio.h>
    int main(){
        printf("master");
        return 0;
    }

現(xiàn)在基礎(chǔ)操作都完成了援奢,因?yàn)閙aster和feature-B都修改了1.c文件,我們合并master和feature-B分支后提示我遇到?jīng)_突了:



打開(kāi)1.c文件可以看到:



HEAD中的是當(dāng)前的內(nèi)容忍捡,feature-B中的是feature-B的內(nèi)容,只要?jiǎng)h除其中一個(gè)就可以切黔。然后加入到暫存區(qū)砸脊,然后提交,我寫(xiě)的提交日志為"fix conflict",下面會(huì)用到纬霞。

git commit --amend 修改提交信息

該命令是修改上一次提交的日志:



我已經(jīng)修改為如圖所示凌埂。

git rebase -i 壓縮歷史

在合并分支之前發(fā)現(xiàn)已提交的內(nèi)容有一些錯(cuò)誤,不妨提交一個(gè)修改诗芜,把這個(gè)修改包含到前一個(gè)提交中瞳抓,壓縮成一個(gè)歷史記錄埃疫。
創(chuàng)建一個(gè)分支feature-D,并修改1.c文件如圖:


然后加入暫存區(qū)和提交 git commti -am "日志" 一步完成這2步操作,我提交的日志為"add feature-D"。但是我提交后發(fā)現(xiàn)我拼寫(xiě)錯(cuò)誤,所以我們需要修改之后重新加入暫存區(qū)后再提交:

可以看到修改后提交孩哑,日志為"fix typo",用 git log 查看為:

可以通過(guò) git rebase -i HEAD~2 來(lái)壓縮歷史記錄栓霜,其中fix typo本不應(yīng)該出現(xiàn)在歷史記錄中的,HEAD~2 是最近2次的提交記錄,顯示如圖所示信息:

可以通過(guò)把pick改為fixup然后保存提交横蜒,之后再用 git log 查看歷史記錄可以發(fā)現(xiàn)已經(jīng)沒(méi)有"fix typo" 等記錄了胳蛮。

遠(yuǎn)程倉(cāng)庫(kù)的推送和獲取

推送至遠(yuǎn)程倉(cāng)庫(kù)

在GitHub上創(chuàng)建一個(gè)和本地倉(cāng)庫(kù)相同的倉(cāng)庫(kù)名,具體怎么創(chuàng)建倉(cāng)庫(kù)請(qǐng)參考上一篇丛晌。

  1. 創(chuàng)建好遠(yuǎn)程倉(cāng)庫(kù)之后仅炊, git remote add origin git@github.com:用戶名/倉(cāng)庫(kù)名.git 將它設(shè)置成本地倉(cāng)庫(kù)的遠(yuǎn)程倉(cāng)庫(kù),origin 遠(yuǎn)程倉(cāng)庫(kù)的名稱設(shè)置為該標(biāo)志符
  2. git push -u origin master 澎蛛,git push將本地倉(cāng)庫(kù)的master的內(nèi)容推送到遠(yuǎn)程倉(cāng)庫(kù)抚垄。-u參數(shù)在推送同時(shí)將origin倉(cāng)庫(kù)的master分支設(shè)置為本地倉(cāng)庫(kù)當(dāng)前分支的upstream(上游),以后運(yùn)行g(shù)it pull從遠(yuǎn)程倉(cāng)庫(kù)獲取內(nèi)容時(shí)谋逻,本地倉(cāng)庫(kù)的這個(gè)分支可以直接從origin的master分支獲取內(nèi)容呆馁,省去了另外添加參數(shù)。
    在GitHub的結(jié)果如下:

    3.也可以推送其他分支到遠(yuǎn)程倉(cāng)庫(kù)斤贰。我們?cè)囍扑蚮eature-B到遠(yuǎn)程倉(cāng)庫(kù)

我這邊 origin 標(biāo)示符智哀,我寫(xiě)的default,大家可以自己選擇。最后在GitHub上的結(jié)果為:


看荧恍,我們已經(jīng)把feature-B分支推送到GitHub上的遠(yuǎn)程倉(cāng)庫(kù)了瓷叫。
oh, great!

從遠(yuǎn)程倉(cāng)庫(kù)中獲取

git clone 獲取遠(yuǎn)程倉(cāng)庫(kù)

換一個(gè)目錄,然后輸入 git clone git@github.com:用戶名/倉(cāng)庫(kù)名.git 就會(huì)克隆到本地送巡。然后輸入 git branch -a 可以查看分支摹菠,-a分支不僅可以查看本地分支也可以查看遠(yuǎn)程的:


上面我們看到只是把master分支克隆到本地,沒(méi)有feature-B,現(xiàn)在我們獲取feature-B分支:

然后我們可以修改feature-B中1.c文件骗爆,然后:

    git add 1.c
    git commit -m "日志"
    git push              //推送到遠(yuǎn)程倉(cāng)庫(kù)

成功后可到GitHub中去查:


git pull 獲取最新遠(yuǎn)程倉(cāng)庫(kù)的分支

OK,Done!

相關(guān)

Pro Git:https://git-scm.com/book/zh/v1
LearnGitBranching:http://pcottle.github.io/learnGitBranching/

總結(jié)

至此Git相關(guān)操作都差不多介紹完了次氨,希望通過(guò)我的介紹能讓大家對(duì)Git有基本的了解。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末摘投,一起剝皮案震驚了整個(gè)濱河市煮寡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌犀呼,老刑警劉巖幸撕,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異外臂,居然都是意外死亡坐儿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)貌矿,“玉大人炭菌,你說(shuō)我怎么就攤上這事」渎” “怎么了黑低?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)尽楔。 經(jīng)常有香客問(wèn)我投储,道長(zhǎng),這世上最難降的妖魔是什么阔馋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任玛荞,我火速辦了婚禮,結(jié)果婚禮上呕寝,老公的妹妹穿的比我還像新娘勋眯。我一直安慰自己,他們只是感情好下梢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布客蹋。 她就那樣靜靜地躺著,像睡著了一般孽江。 火紅的嫁衣襯著肌膚如雪讶坯。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天岗屏,我揣著相機(jī)與錄音辆琅,去河邊找鬼。 笑死这刷,一個(gè)胖子當(dāng)著我的面吹牛婉烟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播暇屋,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼似袁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了咐刨?” 一聲冷哼從身側(cè)響起昙衅,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎定鸟,沒(méi)想到半個(gè)月后绒尊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡仔粥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片躯泰。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谭羔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出麦向,到底是詐尸還是另有隱情瘟裸,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布诵竭,位于F島的核電站话告,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏卵慰。R本人自食惡果不足惜沙郭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望裳朋。 院中可真熱鬧病线,春花似錦、人聲如沸鲤嫡。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)暖眼。三九已至惕耕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诫肠,已是汗流浹背司澎。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留区赵,地道東北人惭缰。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像笼才,于是被迫代替她去往敵國(guó)和親漱受。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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