git常用命令

git常用命令

這篇文章將來(lái)介紹一下git常用命令。

創(chuàng)建版本庫(kù)

  • 在c盤(pán)創(chuàng)建一個(gè)目錄潘靖,例如 learngit莲兢。
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
  • 通過(guò)git init 變成git可以管理的目錄。

    $ git init
    Initialized empty Git repository in /Users/michael/learngit/.git/
    

這樣倉(cāng)庫(kù)就建立好了贼穆。

  • 然后建立文件然后添加到版本庫(kù)。例如:建立readme.txt 文件兰粉。保存到learngit 目錄故痊。

    $ git add readme.txt
    
$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

版本回退

  • 可以使用$ git log 來(lái)查看命令。

  • 在git中用HEAD來(lái)表示當(dāng)前版本玖姑,用HEAD來(lái)表示上一個(gè)版本愕秫,用HEAD^來(lái)表示上上一個(gè)版本。用HEAD~100來(lái)表示上100個(gè)版本焰络。

  • 版本回退命令

    $ git reset --hard HEAD^
    HEAD is now at e475afc add distributed
    

    也可以使用

    $ git reset --hard 1094a
    HEAD is now at 83b0afe append GPL
    

    其中1094a 是部分版本號(hào)戴甩。$ git reflog 可以用來(lái)查看自己的每一個(gè)版本號(hào)。

  • $ git status 可以用來(lái)查看狀態(tài)闪彼。

撤銷(xiāo)修改

  • git checkout -- file可以丟棄工作區(qū)的修改甜孤。例如:

    $ git checkout -- readme.txt
    

    用命令git reset HEAD <file>可以把暫存區(qū)的修改撤銷(xiāo)掉(unstage),重新放回工作區(qū):

    $ git reset HEAD readme.txt
    Unstaged changes after reset:
    M    readme.txt
    

刪除文件

  • 若創(chuàng)建了一個(gè)文件并提交了上去。例如:創(chuàng)建了一個(gè)新文件test.txt 到git并提交了缴川。

    這樣可以執(zhí)行

$ rm test.txt
$ git rm test.txt
rm 'test.txt'

$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt
這樣文件就從版本庫(kù)里刪除了茉稠。

另一種情況是刪錯(cuò)了,因?yàn)榘姹編?kù)里還有呢把夸,所以可以很輕松地把誤刪的文件恢復(fù)到最新版本:

$ git checkout -- test.txt

GitHub上創(chuàng)建自己的遠(yuǎn)程倉(cāng)庫(kù)

  • 首先配置好自己的GitHub網(wǎng)站然后輸入命令而线,使自己的本地倉(cāng)庫(kù)可以上傳到遠(yuǎn)程倉(cāng)庫(kù)中。
$ git remote add origin git@github.com:michaelliao/learngit.git

? 其中michaelliaoGitHub用戶(hù)名扎即。

? 下一步吞获,就可以把本地庫(kù)的所有內(nèi)容推送到遠(yuǎn)程庫(kù)上:

$ git push -u origin master
Counting objects: 20, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.
Total 20 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To github.com:michaelliao/learngit.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

從現(xiàn)在起况凉,只要本地作了提交谚鄙,就可以通過(guò)命令:

$ git push origin master

把本地master分支的最新修改推送至GitHub,現(xiàn)在刁绒,你就擁有了真正的分布式版本庫(kù)闷营!

遠(yuǎn)程庫(kù)克隆

  • 假設(shè)你有一個(gè)新的倉(cāng)庫(kù)gitskills,可以使用git clone命令來(lái)克隆到本地倉(cāng)庫(kù)知市。

    $ git clone git@github.com:michaelliao/gitskills.git
    Cloning into 'gitskills'...
    remote: Counting objects: 3, done.
    remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
    Receiving objects: 100% (3/3), done.
    

創(chuàng)建分支

  • $ git checkout -b dev
    Switched to a new branch 'dev'
    

    相當(dāng)于

    $ git branch dev
    $ git checkout dev
    Switched to branch 'dev'
    

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

    $ git branch
    * dev
      master
    

    例如修改之后然后提交

    $ git add readme.txt 
    $ git commit -m "branch test"
    [dev b17d20e] branch test
     1 file changed, 1 insertion(+)
    

    然后可以切換后master分支上

    $ git checkout master
    Switched to branch 'master'
    

    然后你就會(huì)發(fā)現(xiàn)原來(lái)的修改不見(jiàn)了∩得耍現(xiàn)在,我們把dev分支的工作成果合并到master分支上:

    $ git merge dev
    Updating d46f35e..b17d20e
    Fast-forward
     readme.txt | 1 +
     1 file changed, 1 insertion(+)
    

    這樣就會(huì)發(fā)現(xiàn)自己的文件發(fā)生了變化嫂丙。然后就可以放心的刪除dev分支了娘赴。

    $ git branch -d dev
    Deleted branch dev (was b17d20e).
    
    $ git branch
    * master
    

    這樣就會(huì)發(fā)現(xiàn)只剩下master分支。

解決沖突

  • 若我們先建立分支feature1.現(xiàn)在跟啤,master分支和feature1分支各自都分別有新的提交诽表,變成了這樣:

    git-br-feature1

    這種情況下,Git無(wú)法執(zhí)行“快速合并”隅肥,只能試圖把各自的修改合并起來(lái)竿奏,但這種合并就可能會(huì)有沖突.:

    $ git merge feature1
    Auto-merging readme.txt
    CONFLICT (content): Merge conflict in readme.txt
    Automatic merge failed; fix conflicts and then commit the result.
    

    果然沖突了!Git告訴我們腥放,readme.txt文件存在沖突泛啸,必須手動(dòng)解決沖突后再提交。git status也可以告訴我們沖突的文件:

    $ git status
    On branch master
    Your branch is ahead of 'origin/master' by 2 commits.
      (use "git push" to publish your local commits)
    
    You have unmerged paths.
      (fix conflicts and run "git commit")
      (use "git merge --abort" to abort the merge)
    
    Unmerged paths:
      (use "git add <file>..." to mark resolution)
    
        both modified:   readme.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    

    我們可以直接查看readme.txt的內(nèi)容:

    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    Git has a mutable index called stage.
    Git tracks changes of files.
    <<<<<<< HEAD
    Creating a new branch is quick & simple.
    =======
    Creating a new branch is quick AND simple.
    >>>>>>> feature1
    

    Git用<<<<<<<秃症,=======候址,>>>>>>>標(biāo)記出不同分支的內(nèi)容,我們修改如下后保存:

    Creating a new branch is quick and simple.
    

    再提交:

    $ git add readme.txt 
    $ git commit -m "conflict fixed"
    [master cf810e4] conflict fixed
    

    現(xiàn)在种柑,master分支和feature1分支變成了下圖所示:

    git-br-conflict-merged

    用帶參數(shù)的git log也可以看到分支的合并情況:

    $ git log --graph --pretty=oneline --abbrev-commit
    *   cf810e4 (HEAD -> master) conflict fixed
    |\  
    | * 14096d0 (feature1) AND simple
    * | 5dc6824 & simple
    |/  
    * b17d20e branch test
    * d46f35e (origin/master) remove test.txt
    * b84166e add test.txt
    * 519219b git tracks changes
    * e43a48b understand how stage works
    * 1094adb append GPL
    * e475afc add distributed
    * eaadf4e wrote a readme file
    

    最后岗仑,刪除feature1分支:

    $ git branch -d feature1
    Deleted branch feature1 (was 14096d0).
    

    工作完成。

分支管理策略

也就是強(qiáng)制禁用Fast forward形式莹规。

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
 readme.txt | 1 +
 1 file changed, 1 insertion(+)

bug分支

Git還提供了一個(gè)stash功能赔蒲,可以把當(dāng)前工作現(xiàn)場(chǎng)“儲(chǔ)藏”起來(lái),等以后恢復(fù)現(xiàn)場(chǎng)后繼續(xù)工作:

$ git stash
Saved working directory and index state WIP on dev: f52c633 add merge

現(xiàn)在,用git status查看工作區(qū)舞虱,就是干凈的(除非有沒(méi)有被Git管理的文件)欢际,因此可以放心地創(chuàng)建分支來(lái)修復(fù)bug。

是時(shí)候接著回到dev分支干活了矾兜!

$ git checkout dev
Switched to branch 'dev'

$ git status
On branch dev
nothing to commit, working tree clean

工作區(qū)是干凈的损趋,剛才的工作現(xiàn)場(chǎng)存到哪去了?用git stash list命令看看:

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

工作現(xiàn)場(chǎng)還在椅寺,Git把stash內(nèi)容存在某個(gè)地方了浑槽,但是需要恢復(fù)一下,有兩個(gè)辦法:

一是用git stash apply恢復(fù)返帕,但是恢復(fù)后桐玻,stash內(nèi)容并不刪除,你需要用git stash drop來(lái)刪除荆萤;

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

$ git stash pop
On branch dev
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   hello.py

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   readme.txt

Dropped refs/stash@{0} (5d677e2ee266f39ea296182fb2354265b91b3b2a)

再用git stash list查看,就看不到任何stash內(nèi)容了:

$ git stash list

你可以多次stash链韭,恢復(fù)的時(shí)候偏竟,先用git stash list查看,然后恢復(fù)指定的stash敞峭,用命令:

$ git stash apply stash@{0}

feature分支

feature分支與bug分支沒(méi)有本質(zhì)不同踊谋。

詳細(xì)參考廖雪峰官方微博

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市旋讹,隨后出現(xiàn)的幾起案子殖蚕,更是在濱河造成了極大的恐慌,老刑警劉巖骗村,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫌褪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡胚股,警方通過(guò)查閱死者的電腦和手機(jī)笼痛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)琅拌,“玉大人缨伊,你說(shuō)我怎么就攤上這事〗Γ” “怎么了刻坊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)党晋。 經(jīng)常有香客問(wèn)我谭胚,道長(zhǎng)徐块,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任灾而,我火速辦了婚禮胡控,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘旁趟。我一直安慰自己昼激,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布锡搜。 她就那樣靜靜地躺著橙困,像睡著了一般。 火紅的嫁衣襯著肌膚如雪耕餐。 梳的紋絲不亂的頭發(fā)上凡傅,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音蛾方,去河邊找鬼像捶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛桩砰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播释簿,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼亚隅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了庶溶?” 一聲冷哼從身側(cè)響起煮纵,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎偏螺,沒(méi)想到半個(gè)月后行疏,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡套像,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年酿联,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夺巩。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贞让,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出柳譬,到底是詐尸還是另有隱情喳张,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布美澳,位于F島的核電站销部,受9級(jí)特大地震影響摸航,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舅桩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一忙厌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧江咳,春花似錦逢净、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至踩身,卻和暖如春胀茵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挟阻。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工琼娘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人附鸽。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓脱拼,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親坷备。 傳聞我的和親對(duì)象是個(gè)殘疾皇子熄浓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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

  • 一、 Git 常用命令速查 git branch 查看本地所有分支 git status 查看當(dāng)前狀態(tài) git c...
    LOVE_晴天閱讀 2,324評(píng)論 0 10
  • 配置 首先是配置帳號(hào)信息 ssh -T git@github.com#登陸github 修改項(xiàng)目中的個(gè)人信息 1 ...
    rochuan閱讀 724評(píng)論 1 1
  • cover:http://www.jb51.net/article/55442.htm 一省撑、 Git 常用命令速查...
    WXL_JIANSHU閱讀 1,746評(píng)論 0 1
  • 半世浮華赌蔑,一生惆悵 。于是開(kāi)始和結(jié)束竟秫,無(wú)常和宿命都不是借口娃惯,旁人亦無(wú)可厚非…… 怪你過(guò)分美麗…… 每年的4月1號(hào),...
    _筱冰閱讀 223評(píng)論 0 3
  • 在廣州6年的時(shí)間,除了喝茶飲食文化氣息很濃拙吉,印象深刻的一點(diǎn)是人尤其地多潮孽,吃飯排隊(duì)都得拿號(hào),拿了號(hào)還不一定能吃上筷黔。每...
    lilianana閱讀 911評(píng)論 0 49