git筆記
創(chuàng)建版本庫(kù)(repository)
-
創(chuàng)建一個(gè)空目錄:
$ mkdir learngit $ cd learngit $ pwd /Users/michael/learngit
-
通過(guò)
git init
把這個(gè)目錄變成Git可以管理的倉(cāng)庫(kù):$ git init
把文件添加到版本庫(kù)
一定要放到learngit目錄下(子目錄亦可)
-
git add
把文件添加到倉(cāng)庫(kù)$ git add readme.txt
-
git commit
告訴Git, 把文件提交到倉(cāng)庫(kù)$ git commit -m "wrote a readme file"
git status
可以讓我們時(shí)刻掌握倉(cāng)庫(kù)當(dāng)前的狀態(tài)
gti diff
可以看到做了什么修改
版本回退
-
HEAD
指向的版本就是當(dāng)前版本悼院,因此虑凛,Git允許我們?cè)诎姹镜臍v史之間穿梭,使用命令git reset --hard commit_id
腐巢。 - 穿梭前交胚,用
git log
可以查看提交歷史中鼠,以便確定要回退到哪個(gè)版本胯究。 - 要重返未來(lái),用
git reflog
查看命令歷史泼舱,以便確定要回到未來(lái)的哪個(gè)版本等缀。
撤銷修改
git checkout -- file
可以丟棄工作區(qū)的修改:
一種是readme.txt
自修改后還沒(méi)有被放到暫存區(qū),現(xiàn)在娇昙,撤銷修改就回到和版本庫(kù)一模一樣的狀態(tài)尺迂;
一種是readme.txt
已經(jīng)添加到暫存區(qū)后,又作了修改冒掌,現(xiàn)在噪裕,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)。
總之股毫,就是讓這個(gè)文件回到最近一次git commit
或git add
時(shí)的狀態(tài)膳音。
刪除文件
$ git rm test.txt
遠(yuǎn)程倉(cāng)庫(kù)
-
創(chuàng)建SSH Key
$ ssh-keygen -t rsa -C "youremail@example.com"
-
登錄GitHub,打開(kāi)“Account settings”皇拣,“SSH Keys”頁(yè)面严蓖;
然后,點(diǎn)“Add SSH Key”氧急,填上任意Title,在Key文本框里粘貼
id_rsa.pub
文件的內(nèi)容毫深。
添加遠(yuǎn)程庫(kù)
登陸GitHub吩坝,然后,在右上角找到“Create a new repo”按鈕哑蔫,創(chuàng)建一個(gè)新的倉(cāng)庫(kù)
我們根據(jù)GitHub的提示钉寝,在本地的
learngit
倉(cāng)庫(kù)下運(yùn)行命令遠(yuǎn)程庫(kù)的名字就是
origin
,這是Git默認(rèn)的叫法闸迷,也可以改成別的嵌纲,但是origin
這個(gè)名字一看就知道是遠(yuǎn)程庫(kù)-
把本地庫(kù)的內(nèi)容推送到遠(yuǎn)程,用
git push
命令腥沽,實(shí)際上是把當(dāng)前分支master
推送到遠(yuǎn)程逮走。由于遠(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)化命令墓臭。 -
從現(xiàn)在起蘸鲸,只要本地作了提交,就可以通過(guò)命令
$ git push origin master
從遠(yuǎn)程庫(kù)克隆
登陸GitHub窿锉,創(chuàng)建一個(gè)新的倉(cāng)庫(kù)酌摇,名字叫
gitskills
-
用命令
git clone
克隆一個(gè)本地庫(kù)$ git clone git@github.com:michaelliao/gitskills.git
創(chuàng)建與合并分支
-
創(chuàng)建
dev
分支,然后切換到dev
分支:$ git checkout -b dev
git checkout
命令加上-b
參數(shù)表示創(chuàng)建并切換,相當(dāng)于以下兩條命令:$ git branch dev $ git checkout dev
-
用
git branch
命令查看當(dāng)前分支:$ git branch
-
dev
分支的工作完成嗡载,我們就可以切換回master
分支$ git checkout master
-
把
dev
分支的工作成果合并到master
分支上$ git merge dev
-
刪除
dev
分支$ git branch -d dev
解決沖突
git status
可以告訴我們沖突的文件直接查看沖突文件內(nèi)容窑多,Git用
<<<<<<<
,=======
鼻疮,>>>>>>>
標(biāo)記出不同分支的內(nèi)容-
帶參數(shù)的
git log
也可以看到分支的合并情況$ git log --graph --pretty=oneline --abbrev-commit
分支管理策略
Bug分支
當(dāng)手頭工作沒(méi)有完成時(shí)怯伊,先把工作現(xiàn)場(chǎng)git stash
一下,然后去修復(fù)bug判沟,修復(fù)后耿芹,再git stash pop
,回到工作現(xiàn)場(chǎng)挪哄。
多人協(xié)作
多人協(xié)作的工作模式通常是這樣:
- 首先吧秕,可以試圖用
git push origin branch-name
推送自己的修改; - 如果推送失敗迹炼,則因?yàn)檫h(yuǎn)程分支比你的本地更新砸彬,需要先用
git pull
試圖合并; - 如果合并有沖突斯入,則解決沖突砂碉,并在本地提交;
- 沒(méi)有沖突或者解決掉沖突后刻两,再用
git push origin branch-name
推送就能成功增蹭!
如果git pull
提示“no tracking information”,則說(shuō)明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒(méi)有創(chuàng)建磅摹,用命令git branch --set-upstream branch-name origin/branch-name
滋迈。
- 查看遠(yuǎn)程庫(kù)信息,使用
git remote -v
户誓; - 本地新建的分支如果不推送到遠(yuǎn)程饼灿,對(duì)其他人就是不可見(jiàn)的;
- 從本地推送分支帝美,使用
git push origin branch-name
碍彭,如果推送失敗,先用git pull
抓取遠(yuǎn)程的新提交; - 在本地創(chuàng)建和遠(yuǎn)程分支對(duì)應(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
墙基,如果有沖突软族,要先處理沖突。
創(chuàng)建標(biāo)簽
- 命令
git tag
用于新建一個(gè)標(biāo)簽残制,默認(rèn)為HEAD
立砸,也可以指定一個(gè)commit id; -
git tag -a -m "blablabla..."
可以指定標(biāo)簽信息初茶; -
git tag -s -m "blablabla..."
可以用PGP簽名標(biāo)簽颗祝; - 命令
git tag
可以查看所有標(biāo)簽。
- 命令
git push origin
可以推送一個(gè)本地標(biāo)簽恼布; - 命令
git push origin --tags
可以推送全部未推送過(guò)的本地標(biāo)簽螺戳; - 命令
git tag -d
可以刪除一個(gè)本地標(biāo)簽; - 命令
git push origin :refs/tags/
可以刪除一個(gè)遠(yuǎn)程標(biāo)簽折汞。
操作標(biāo)簽
- 命令
git push origin
可以推送一個(gè)本地標(biāo)簽倔幼; - 命令
git push origin --tags
可以推送全部未推送過(guò)的本地標(biāo)簽; - 命令
git tag -d
可以刪除一個(gè)本地標(biāo)簽爽待; - 命令
git push origin :refs/tags/
可以刪除一個(gè)遠(yuǎn)程標(biāo)簽损同。