目錄:
1.GitHub極速入門-程序員必備技能
** 2.GitHub進階用法-程序員必備技能(所在章節(jié))**
以上章節(jié)用到命令速查表:Git指令速查表
本文章的內(nèi)容目錄:
- HEAD & 標識
- 分支
- 提交歷史
- Pull & Push
- 一些小技巧
1.當開發(fā)到一半遇到需要切換branch情況咬荷,但不想提交開發(fā)了一半的工作圈暗。如何做贷腕?
HEAD & 標識
如圖HEAD標示著最新提交。同時分支標號master標示著分支最新節(jié)點坪仇。
當執(zhí)行g(shù)it commit時:
HEAD和master就會從指向原來的節(jié)點ed489
變?yōu)橹赶?code>f0cec
分支
怎么創(chuàng)建分支嫡意?
但進行并行開發(fā)的時候,我們就需要分支。
例如:我們要開多一條分支開發(fā)feature-A
git branch {新建分支名字}
git branch feature-A
那么怎么查看分支有那些歼捐,并且自己處于那條分支呢?
git branch
其中master前有個*代表所處分支
怎么切換分支晨汹?
git checkout feature-A
接著就切換到feature-A這條分支了豹储。
刪除分支執(zhí)行
git branch -d {分支名字}
那么當你開發(fā)完feature-A
,要將其合并到master
時,怎辦淘这?
//先切換到你想feature-A合并到的分支
git checkout master
// git merge {你想合并入的分支名}
git merge feature-A
但若果merge后彈出如下信息:
feature-A
修改的地方跟在master
修改的地方一樣但修改內(nèi)容不同。那么打開hello文件手動修改沖突地方铝穷。
打開文件钠怯,看到如圖:
<<<<< HEAD
代表著最新提交,沖突地方是not hello world!
>>>>> feature-A
的代表著分支feature-A
曙聂,沖突是hello world!
只要將沖突的地方改掉晦炊,并重新commit就ok了。
那么,只留hello world!
就好了
git add hello
git commit
將各分支提交歷史圖形化
git log --graph
如圖断国,紅色是master贤姆,綠色是分支feature-A
。*號對齊的就是提交歷史稳衬。
提交歷史
Checkout
checkout命令用于從歷史提交(或者暫存區(qū)域)中拷貝文件到工作目錄霞捡,也可用于切換分支。
當我們想回到某一個提交歷史時的文件狀態(tài)時
首先git log
復制提交歷史的id
如圖畫紅線的地方:
接著
//git checkout {提交歷史ID}
git checkout 0ce3a18d5ceac114eaa0fd8decd2009200b59277
就回到了那個歷史記錄了薄疚。
原理如圖碧信,checkout會將那個節(jié)點的文件狀態(tài)復制到暫存區(qū)
和工作目錄
假如我們checkout向前數(shù),第三個節(jié)點街夭。
那么執(zhí)行git checkout master~3
如圖:
如圖HEAD會指向到master前的第三個節(jié)點音婶。
標號master~n代表向這個節(jié)點向前數(shù)第n個節(jié)點
那么當我們想回到原來那個位置呢?
只需git checkout master
那么HEAD就會回到指向ed489那個master節(jié)點的位置莱坎。
那么如果我們想回溯歷史版本呢衣式?
使用reset命令
reset命令把當前分支指向另一個位置,并且有選擇的變動工作目錄和索引檐什。也用來在從歷史倉庫中復制文件到索引碴卧,而不動工作目錄。
像checkout那樣不過這次會將分支都推前到那個歷史乃正。如圖:
那么住册,命令:
//git reset {提交歷史ID}
git reset --hard b148e8064eb97d9b0917bad86131af492a4e9651
我們后悔了不想回溯歷史版本了,但我們已執(zhí)行了reset命令了,那么瓮具?
那么就使用git reflog看所有執(zhí)行過的歷史荧飞。
如圖:
那么看看最左的HEAD曾經(jīng)所在的ID
然后再次使用reset將分支推后到那個ID。
//git reset --hard {提交歷史ID}
git reset 78f16e3
若果我們提交了歷史記錄名党,想改掉那條信息叹阔,則
譬如:
git commit -m "hello"
但我們已經(jīng)執(zhí)行了上面的命令,卻想改掉“hello”這信息传睹。
那么
git commit --ammend
Pull & Push
git push {遠程庫名} {分支名}
和 git pull {遠程庫名} {分支名}
都是將提交歷史從分支名開始一直到初節(jié)點push上去(pull 下來)
如圖耳幢,執(zhí)行git push remoteName a
將分支a
push 上去,則只會push 從a沿著箭頭到盡頭的提交歷史欧啤,b是沒有push上去的:
git fetch
如圖:
在local我們的master是指向a72
而GitHub上作出master是指向5b3
這時Push的話就會有沖突睛藻。
于是就先使用git fetch origin
將GitHub的改變下載到本地,并用標示origin/master指向該分支邢隧。如圖:
接著只需使用merge將origin/master與master合并解決沖突再提交就可以了店印。
一些小技巧(不定期更新)
1.當開發(fā)到一半遇到需要切換branch情況,但不想提交開發(fā)了一半的工作倒慧。如何做按摘?
- 使用stash
執(zhí)行git stash
暫時存儲變化
然后當你修改完另一分支后讥邻,回到原分支
執(zhí)行git stash pop
恢復原來的變化,繼續(xù)原來的工作:)
最后
今天偶然看到的這句話院峡,挺帶感的兴使。
your time is limited, so don't waste it living someone else s life. --喬布斯
所以就在這里愿大家能愛愿愛之人,做愿做之事照激,成愿成之人!!!!!
共勉之
-----至此本章節(jié)END--------
如果喜歡這篇文发魄,就請你動動拇指,戳喜歡吧;)
我所有文章的總目錄:我的簡書博文地圖