前提:
SVN屬于集中式管理:需要依賴網(wǎng)絡(luò)以及“中央管理庫(kù)”
Git屬于分布式管理:不需要網(wǎng)絡(luò),任何人本地都是一個(gè)完整的代碼庫(kù)芒率。
注意事項(xiàng):
1琉挖、不管是刪除還是添加店雅,都要先將改變的代碼add,然后在commit
2、發(fā)起pull request的時(shí)候思杯, 是將你fork的項(xiàng)目clone到本地胜蛉, 然后進(jìn)行修改,修改完了再提交代碼到你的工作區(qū)色乾,因?yàn)閯e人的你也提交不上去 O(∩_∩)O哈哈~ 誊册。然后在你fork的項(xiàng)目中發(fā)起pull request。
常用命令:
pwd: 查看目錄地址
ls:顯示所有子文件夾
cd:切換文件夾進(jìn)入暖璧; cd.. 后退 cd~ 直接退到根目錄
cat <file> 查看文件內(nèi)容
open file 打開文件
終端命令:
Ctrl + A 將光標(biāo)跳到行頭
Ctrl + E 將光標(biāo)跳到行尾
Ctrl + L 清屏
Ctrl + R 搜索以前執(zhí)行過的命令
Ctrl + C 終止正在運(yùn)行的程序
Ctrl + D 退出 Terminal(這里建議使用 Command + W 來完成)
Git的使用案怯,本地倉(cāng)庫(kù) 大體流程
1.創(chuàng)建一個(gè)Git倉(cāng)庫(kù) : git init
2.在創(chuàng)建的目錄下,隨便添加文件澎办。然后git add <file> 如果有多個(gè)文件嘲碱,可以多次添加 金砍,也可以添加一個(gè)文件夾的,添加文件夾一定要是完整路徑,注意后面那個(gè)路徑"/"符號(hào)麦锯。只需寫出前幾個(gè)字母恕稠,tab按鍵會(huì)自動(dòng)補(bǔ)全,git提示信息那里也有完整的要添加的文件离咐。
git add . // 注意 . 是增加所有的*
3.將你添加的文件提交到倉(cāng)庫(kù)谱俭。 git commit (有一個(gè)問題:每次git commit之后,都要彈出確認(rèn)提交的文件宵蛀,要手動(dòng)選擇昆著,刪除前面的#號(hào)。假如新加的文件很多术陶,一個(gè)個(gè)刪除#號(hào)好麻煩啊凑懂,有沒有別的方法?還是我操作的是錯(cuò)誤的梧宫? 求指導(dǎo))————有的時(shí)候會(huì)彈出接谨,有時(shí)候又不用彈出,不知道什么原因塘匣。
git commit -m "這次提交的備注" 強(qiáng)烈建議每次commit都要寫上備注脓豪,方便后續(xù)查看。 git commit 的時(shí)候不需要指出對(duì)應(yīng)的文件忌卤。
4.git status 查看當(dāng)前的狀態(tài)扫夜。 可以看到內(nèi)容的變化,需要提交修改的內(nèi)容驰徊。
5.git diff 可以比較前后兩次修改之間的變化笤闯。
6.查看版本提交信息
git log 可以查看提交的版本信息和順序號(hào) git log --pretty=oneline 查看信息簡(jiǎn)單明了。
7.版本回退
git reset --hard HEAD^ 后面這個(gè)^數(shù)量棍厂,代表返回前面第幾次提交颗味,太多了的時(shí)候,可以跟數(shù)字牺弹。git reset --hard HEAD^^^ , git reset --hard HEAD^66
不能確定要返回的位置是第幾次提交位置浦马,可以通過log查看對(duì)應(yīng)提交的版本序號(hào),用 git reset --hard 78er7387 返回到對(duì)應(yīng)提交位置 例驹。這個(gè)是版本號(hào)捐韩,沒有必要寫全,只寫前幾位就好鹃锈,git會(huì)自動(dòng)查找的荤胁。
版本回退后悔了,你可以使用git reflog查看命令歷史屎债,以便確定要回到未來的哪個(gè)版本仅政。
撤銷修改:
沒有add之前垢油,用git checkout --file。 一旦add到了暫存區(qū)圆丹,就要用git reset HEAD file , 然后再git checkout --file滩愁。
8.本地關(guān)聯(lián)遠(yuǎn)程的倉(cāng)庫(kù) git remote add origin <遠(yuǎn)程倉(cāng)庫(kù)地址>
關(guān)聯(lián)之后,本地有修改就可以直接提交代碼了辫封。 git push origin master
第一次提交多添加一個(gè)參數(shù)硝枉,將本地與遠(yuǎn)程的分支關(guān)聯(lián) git push -u origin master
遠(yuǎn)程倉(cāng)庫(kù)與本地倉(cāng)庫(kù)的關(guān)聯(lián)
下載遠(yuǎn)程倉(cāng)庫(kù)到本地:
git clone <遠(yuǎn)程倉(cāng)庫(kù)的url地址>
1.下載下來的代碼一般只有一個(gè)分支,但是我們最好不要在這個(gè)分支上進(jìn)行修改倦微。
新建一個(gè)develop分支 git checkout -b develop 切換到develop分支 git branch develop
一步到位法:git branch -b develop 新建一個(gè)develop分支妻味,并且切換到develop分支。
以后在修改欣福、提交代碼就是在develop分支上了责球。 開發(fā)完成后就可以合并到master分支上去了。
2.合并分支: 首先切換到要合并的分支拓劝,然后在合并
git checkout -b master
git merge develop 合并develop分支內(nèi)容到master分支雏逾。
3.刪除分支:開發(fā)分支功能完了,代碼也合并了郑临,就可以刪除了
git branch -d develop git branch -D develop 后面這個(gè)是強(qiáng)制刪除分支
注:合并dev分支栖博,請(qǐng)注意--no-ff參數(shù),表示禁用Fast forward模式厢洞。
git merge --no-ff -m "merge with no-ff" develop
本次合并要?jiǎng)?chuàng)建一個(gè)新的commit笛匙,所以加上-m參數(shù),把commit描述寫進(jìn)去犀变。
小結(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>
4.沖突解決:
場(chǎng)景:當(dāng)你在develop分支改變了一個(gè)文件,然后切換到master分支又修改了同一個(gè)文件秋柄。合并代碼的時(shí)候就會(huì)出現(xiàn)沖突获枝。
git status 查看提示的沖突,在master分支上修改沖突內(nèi)容骇笔,在commit即可省店。 然后刪除develop分支。
小結(jié):當(dāng)Git無(wú)法自動(dòng)合并分支時(shí)笨触,就必須首先解決沖突懦傍。解決沖突后,再提交芦劣,合并完成粗俱。
用git log --graph命令可以看到分支合并圖。
5.暫存工作區(qū)
一個(gè)功能還沒有開發(fā)完虚吟,代碼不能提交寸认,然后要緊急修改一個(gè)bug签财,這個(gè)時(shí)候就要把現(xiàn)在的代碼暫存起來。
使用 git stash 命令偏塞,暫存現(xiàn)在的代碼唱蒸。
然后切回master分支,在新建一個(gè)fixbug分支灸叼。 git checkout -b master git branch -b fixbug
然后在這個(gè)fixbug分支神汹,修改好bug,提交代碼古今,在合并到master分支屁魏。git add .; git commit -m "fix a bug" ; git checkout master ; git merge fixbug . git branch -d fixbug.完成本次的bug修復(fù)。
然后你就又可以返回到develop分支繼續(xù)你未完成的開發(fā)任務(wù)了沧卢。
git checkout develop
然后使用 git stash list
查看暫存區(qū)蚁堤。
恢復(fù)之前的工作區(qū)有兩個(gè)辦法:
一是用git stash apply
恢復(fù),但是恢復(fù)后但狭,stash內(nèi)容并不刪除披诗,你需要用git stash drop來刪除;
另一種方式是用git stash pop
立磁,恢復(fù)的同時(shí)把stash內(nèi)容也刪了呈队;
你可以多次暫存內(nèi)容,然后使用
git stash list
命令查看暫存的位置唱歧,使用git stash apply stash@{0}
回復(fù)你想繼續(xù)工作的內(nèi)容宪摧。 @{數(shù)字}這個(gè)數(shù)字就是你多次存儲(chǔ)的序列數(shù)字
6.多人合作
你的小伙伴要在dev分支上開發(fā),就必須創(chuàng)建遠(yuǎn)程origin的dev分支到本地颅崩,于是他用這個(gè)命令創(chuàng)建本地dev分支:
$ git checkout -b dev origin/dev
提交代碼之前一般要先git pull ... 如果git pull也失敗了几于,原因是沒有指定本地dev分支與遠(yuǎn)程origin/dev分支的鏈接,根據(jù)提示沿后,設(shè)置dev和origin/dev的鏈接:
git branch --set-upstream dev origin/dev
如果git pull提示“no tracking information”沿彭,則說明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒有創(chuàng)建,用命令git branch --set-upstream branch-name origin/branch-name尖滚。
7.添加標(biāo)簽
git log 默認(rèn)標(biāo)簽是打在最新提交的commit上的
git tag v0.9 6224937 也可以根據(jù)commitID打標(biāo)簽
還可以創(chuàng)建帶有說明的標(biāo)簽喉刘,用-a指定標(biāo)簽名,-m指定說明文字:
git tag -a v0.1 -m "version 0.1 released" 3628164
用命令git show <tagname>
可以看到說明文字:
8.操作標(biāo)簽
git tag -d tagName
//刪除一個(gè)標(biāo)簽
git push origin tagName
推送某一個(gè)標(biāo)簽到遠(yuǎn)程漆弄。一次性推送所有標(biāo)簽到遠(yuǎn)程git push origin --tags
如果標(biāo)簽已經(jīng)推送到遠(yuǎn)程睦裳,要?jiǎng)h除遠(yuǎn)程標(biāo)簽就麻煩一點(diǎn),先從本地刪除:
git tag -d v0.9
然后撼唾,從遠(yuǎn)程刪除廉邑。刪除命令也是push,但是格式如下:
git push origin :refs/tags/v0.9
關(guān)聯(lián)倉(cāng)庫(kù)問題:
如果在使用命令git remote add時(shí)報(bào)錯(cuò):
git remote add origin url
fatal: remote origin already exists.
這說明本地庫(kù)已經(jīng)關(guān)聯(lián)了一個(gè)名叫origin的遠(yuǎn)程庫(kù),此時(shí)鬓催,可以先用git remote -v查看遠(yuǎn)程庫(kù)信息:
git remote -v
origin git@github.com:michaelliao/learngit.git (fetch)
origin git@github.com:michaelliao/learngit.git (push)
可以看到肺素,本地庫(kù)已經(jīng)關(guān)聯(lián)了origin的遠(yuǎn)程庫(kù),并且宇驾,該遠(yuǎn)程庫(kù)指向GitHub倍靡。
我們可以刪除已有的GitHub遠(yuǎn)程庫(kù):
git remote rm origin
再關(guān)聯(lián)碼云的遠(yuǎn)程庫(kù)(注意路徑中需要填寫正確的用戶名):
git remote add origin url
當(dāng)你在git pull origin master 命令之后,報(bào)錯(cuò):
* branch master -> FETCH_HEAD
fatal: refusing to merge unrelated histories
這是因?yàn)椋侯A(yù)設(shè)行為不允許合并沒有共同祖先的分支课舍,需要加上--allow-unrelated-histories
選項(xiàng),再進(jìn)行pull操作才不會(huì)出現(xiàn)此類錯(cuò)誤信息:
git pull origin master --allow-unrelated-histories
最基本的使用應(yīng)該這些就可以了塌西,git很深,如果只是單純的使用它管理代碼筝尾,這些應(yīng)該可以了捡需。如果想深入研究的在去搜索其他命令吧。
感覺每一個(gè)小點(diǎn)都可以寫一篇文章了筹淫,好多內(nèi)容啊站辉。
1.在本地目錄下關(guān)聯(lián)遠(yuǎn)程repository :
git remote add origin [url]
2.取消本地目錄下關(guān)聯(lián)的遠(yuǎn)程庫(kù):
git remote remove origin
遠(yuǎn)程下載到本地:
git clone url
3.查看版本信息:
git log --pretty=oneline
用git log --graph
命令可以看到分支合并圖。
4.撤銷修改:
git checkout -- flie --是必不可少的损姜,否則就是切換操作了饰剥。。
已經(jīng)add的文件摧阅,首先:git reset HEAD file 汰蓉,然后再git checkout --file
5.從本地推送分支,使用git push origin branch-name棒卷,如果推送失敗顾孽,先用git pull抓取遠(yuǎn)程的新提交;
6.在本地創(chuàng)建和遠(yuǎn)程分支對(duì)應(yīng)的分支比规,使用git checkout -b branch-name origin/branch-name若厚,本地和遠(yuǎn)程分支的名稱最好一致;
7.建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián)蜒什,使用git branch --set-upstream branch-name origin/branch-name盹沈;
8.用git diff HEAD --file
命令可以查看工作區(qū)和版本庫(kù)里面最新版本的區(qū)別
9.設(shè)置別名:
git config --global alias.ci commit
git config --global alias.st status
設(shè)置別名組合:
git config --global alias.psm 'push origin master'
git config --global alias.plm 'pull origin master'