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

基礎(chǔ)命令

  1. git init 把目錄變成Git可以管理的倉(cāng)庫(kù)采驻。
  2. git add 把文件添加到倉(cāng)庫(kù)友浸。
  3. git commit 把文件提交到倉(cāng)庫(kù)
  4. git commit -m "這里是文件提交說(shuō)明" 添加提交說(shuō)明嘱函,方便查閱若治。
  5. git status 查看追蹤的目錄文件哪些做了修改峡眶。
  6. git stage 查看倉(cāng)庫(kù)當(dāng)前狀態(tài)瘦黑。
  7. git diff 查看上次修改內(nèi)容京革。
  8. git log 查看歷史修改記錄。
    git log --pretty=online 只看提交說(shuō)明

時(shí)光穿梭

  1. git reset --hard HEAD^ 回到上一個(gè)版本幸斥。
  2. git reset --hard 321ef1 回到版本為 321ef1到狀態(tài)匹摇,版本號(hào)沒(méi)必要寫(xiě)全,前幾位就可以睡毒,Git會(huì)自動(dòng)去找来惧。
  3. git reflog 查看歷史穿梭版本。
  4. git checkout -- file 丟棄工作區(qū)的修改演顾。(git checkout其實(shí)是用版本庫(kù)里的版本替換工作區(qū)的版本供搀,無(wú)論工作區(qū)是修改還是刪除,都可以“一鍵還原”钠至。)

HEAD指向的版本就是當(dāng)前版本葛虐,因此,Git允許我們?cè)诎姹镜臍v史之間穿梭棉钧,使用命令git reset --hard commit_id屿脐。
穿梭前,用git log可以查看提交歷史宪卿,以便確定要回退到哪個(gè)版本的诵。
要重返未來(lái),用git reflog查看命令歷史佑钾,以便確定要回到未來(lái)的哪個(gè)版本西疤。

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

工作區(qū)(Working Directory)
顧名思義就是當(dāng)前工作的目錄。

版本庫(kù)(Repository)
工作區(qū)有一個(gè)隱藏目錄.git休溶,這個(gè)不算工作區(qū)代赁,而是Git的版本庫(kù)。
Git的版本庫(kù)里存了很多東西兽掰,其中最重要的就是稱(chēng)為stage(或者叫index)的暫存區(qū)芭碍,還有Git為我們自動(dòng)創(chuàng)建的第一個(gè)分支master,以及指向master的一個(gè)指針叫HEAD孽尽。

git add命令將文件添加到暫存區(qū)窖壕。
git commit命令將所有暫存區(qū)內(nèi)容提交到當(dāng)前分支。

Workflow

因?yàn)槲覀儎?chuàng)建Git版本庫(kù)時(shí),Git自動(dòng)為我們創(chuàng)建了唯一一個(gè)master分支艇拍,所以狐蜕,現(xiàn)在,git commit就是往master分支上提交更改卸夕。

其實(shí)就是將需要提交的文件修改通通放到暫存區(qū),然后一次性提交暫存區(qū)的所有修改婆瓜。

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

1.創(chuàng)建SSH Key

$ ssh-keygen -t rsa -C "youremail@example.com"

2.關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù)

$ git remote add origin git@github.com:blacker/learngit.git

blacker為關(guān)聯(lián)的github賬戶(hù)名快集,learngit為倉(cāng)庫(kù)名

3.推送到遠(yuǎn)程庫(kù)

git push -u origin master

git push命令是把本地當(dāng)前分支masrer推送到遠(yuǎn)程庫(kù)。
如果遠(yuǎn)程庫(kù)是空的廉白,第一次推送master分支時(shí)个初,加上了-u參數(shù),Git不但會(huì)把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支猴蹂,還會(huì)把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來(lái)院溺,在以后的推送或者拉取時(shí)就可以使用簡(jiǎn)化命令。

git push origin master

錯(cuò)誤處理

To github.com:hellowqw/leargit
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:hellowqw/leargit'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

出現(xiàn)錯(cuò)誤的主要原因是github中的README.md文件不在本地代碼目錄中
解決
可以通過(guò)如下命令進(jìn)行代碼合并【注:pull=fetch+merge]

git pull --rebase origin master

執(zhí)行上面代碼后可以看到本地代碼庫(kù)中多了README.md文件

分支

創(chuàng)建倉(cāng)庫(kù)時(shí)默認(rèn)只有一個(gè)分支磅轻,即主分支master珍逸。HEAD嚴(yán)格來(lái)說(shuō)不是指向提交,而是指向master聋溜,master才是指向提交的谆膳。
最初,master分支是一條線,Git用master指向最新的提交,在用HEAD指向master纯续,就能確定當(dāng)前分支尊残,以及當(dāng)前分支的提交點(diǎn):


每次提交,master分支都會(huì)向前移動(dòng)一步窟哺,這樣,隨著你不斷提交,master分支的線也越來(lái)越長(zhǎng)注盈。
當(dāng)創(chuàng)建新的分支,例如dev時(shí)型雳,Git新建了一個(gè)指針叫dev当凡,指向master相同的提交,再把HEAD指向dev纠俭,就表示當(dāng)前分支在dev上:

git checkout -b dev 

-b參數(shù)表示創(chuàng)建并切換分支沿量,相當(dāng)于以下兩條命令:

git branch dev
git checkout dev

git branch命令查看當(dāng)前分支:

git branch
   * dev
   master


Git創(chuàng)建一個(gè)分支很快,因?yàn)槌嗽黾右粋€(gè)dev指針冤荆,改變HEAD的指向朴则,工作區(qū)的文件都沒(méi)有任何變化!

不過(guò)钓简,從現(xiàn)在開(kāi)始乌妒,對(duì)工作區(qū)的修改和提交就是針對(duì)dev分支了汹想,比如新提交一次后,dev指針往前移動(dòng)一步撤蚊,而master指針不變:

假如在dev上的工作完成了古掏,就可以把dev合并到master上。Git怎么合并呢侦啸?最簡(jiǎn)單的方法槽唾,就是直接把master指向dev的當(dāng)前提交,就完成了合并光涂。
切換master分支:

git checkout master

此時(shí)狀態(tài):


現(xiàn)在庞萍,把dev分支的工作成果合并到master分支上:

git merge dev
Updating d17efd8..fec145a
Fast-forward   #快進(jìn)模式也就是直接把master指向dev的當(dāng)前提交,所以合并速度非惩牛快钝计。
 readme.txt |    1 +
 1 file changed, 1 insertion(+)

git merge命令用于合并指定分支到當(dāng)前分支。


所以Git合并分支也很快齐佳!就改改指針私恬,工作區(qū)內(nèi)容也不變!

合并完分支后重虑,甚至可以刪除dev分支践付。

git branch -d dev

刪除dev分支就是把dev指針給刪掉,刪掉后缺厉,就剩下了一條master分支永高。

git branch
  * master

因?yàn)閯?chuàng)建、合并和刪除分支非程嵴耄快命爬,所以Git鼓勵(lì)我們使用分支完成某個(gè)任務(wù),合并后再刪掉分支辐脖,這和直接在master分支上工作效果是一樣的饲宛,但過(guò)程更安全。

小結(jié)

查看分支:git branch
創(chuàng)建分支:git branch <name>
切換分支:git checkout <name>
創(chuàng)建+切換分支:git checkout -b <name>
合并某分支到當(dāng)前分支:git merge <name>
刪除分支:git branch -d <name>

分支管理策略

在實(shí)際開(kāi)發(fā)中嗜价,我們應(yīng)該按照幾個(gè)基本原則進(jìn)行分支管理:

首先艇抠,master分支應(yīng)該是非常穩(wěn)定的,也就是僅用來(lái)發(fā)布新版本久锥,平時(shí)不能在上面干活家淤;

那在哪干活呢?干活都在dev分支上瑟由,也就是說(shuō)絮重,dev分支是不穩(wěn)定的,到某個(gè)時(shí)候,比如1.0版本發(fā)布時(shí)青伤,再把dev分支合并到master上督怜,在master分支發(fā)布1.0版本;

你和你的小伙伴們每個(gè)人都在dev分支上干活狠角,每個(gè)人都有自己的分支号杠,時(shí)不時(shí)地往dev分支上合并就可以了。

所以丰歌,團(tuán)隊(duì)合作的分支看起來(lái)就像這樣:


令究流,上面有提到合并分支時(shí)又一個(gè)Fast forward模式,需要注意到是這種模式下动遭,刪除分支后,會(huì)丟掉分支信息神得。
如果要強(qiáng)制禁用Fast forward模式厘惦,Git就會(huì)在merge時(shí)生成一個(gè)新的commit,這樣哩簿,從分支歷史上就可以看出分支信息宵蕉。

git merge --no-ff -m "merge with no-ff" dev
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市节榜,隨后出現(xiàn)的幾起案子羡玛,更是在濱河造成了極大的恐慌,老刑警劉巖宗苍,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稼稿,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡讳窟,警方通過(guò)查閱死者的電腦和手機(jī)让歼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)丽啡,“玉大人谋右,你說(shuō)我怎么就攤上這事〔构浚” “怎么了改执?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)坑雅。 經(jīng)常有香客問(wèn)我辈挂,道長(zhǎng),這世上最難降的妖魔是什么霞丧? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任呢岗,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘后豫。我一直安慰自己悉尾,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布挫酿。 她就那樣靜靜地躺著构眯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪早龟。 梳的紋絲不亂的頭發(fā)上惫霸,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音葱弟,去河邊找鬼壹店。 笑死,一個(gè)胖子當(dāng)著我的面吹牛芝加,可吹牛的內(nèi)容都是我干的硅卢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼藏杖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼将塑!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蝌麸,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤点寥,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后来吩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體敢辩,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年误褪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了责鳍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡兽间,死狀恐怖历葛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嘀略,我是刑警寧澤恤溶,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站帜羊,受9級(jí)特大地震影響咒程,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜讼育,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一帐姻、第九天 我趴在偏房一處隱蔽的房頂上張望稠集。 院中可真熱鬧,春花似錦饥瓷、人聲如沸剥纷。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)晦鞋。三九已至,卻和暖如春棺克,著一層夾襖步出監(jiān)牢的瞬間悠垛,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工娜谊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留确买,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓纱皆,卻偏偏與公主長(zhǎng)得像拇惋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抹剩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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

  • Git教程 一、Git簡(jiǎn)介 1.1. Git的誕生1.2.集中式的vs分布式 二蓉坎、安裝Git 三澳眷、創(chuàng)建版本庫(kù) 四、...
    曹淵說(shuō)創(chuàng)業(yè)閱讀 945評(píng)論 0 2
  • ----------------- Git 學(xué)習(xí) ------------------ Git 簡(jiǎn)介 Git...
    Junting閱讀 2,237評(píng)論 0 3
  • 成為一名舞者 自由自在 有自己的舞蹈工作室 自己的舞蹈服裝品牌 自己的舞蹈鞋子品牌 如果30歲能做到就太好了蛉艾。 加油
    矢妖閱讀 193評(píng)論 0 2
  • 一直都沒(méi)太明白apply()與call()的具體使用原理钳踊,今日閑來(lái)無(wú)事,決定好好研究一番勿侯。 JavaScript中...
    神秘者007閱讀 286評(píng)論 0 1