git的優(yōu)勢(shì):不用聯(lián)網(wǎng)就可以工作、遠(yuǎn)程倉(cāng)庫(kù)、強(qiáng)大的分支管理。
基本操作:mkdir(創(chuàng)建文件夾)、cd(退出或進(jìn)入文件夾)、ls(顯示當(dāng)前文件夾的子文件夾)、pwd(顯示當(dāng)前所在的文件夾位置)、vi wu.txt(創(chuàng)建wu.txt文本文檔)、git init(將所在的文件夾設(shè)置成為repositor(倉(cāng)庫(kù)))、ls -ah(查看隱藏起來(lái)的git文件夾)git status(時(shí)刻掌握倉(cāng)庫(kù)當(dāng)前的狀態(tài))git commit -m'注釋'(提交記錄) git diff(查看具體修改了什么)
git時(shí)光機(jī)(版本回溯):
git log(查看最近修改的版本)便于回溯版本查看注釋? git reset --hard HEAD^ or?git reset --hard HEAD~number(回溯到那個(gè)版本)?,假如已經(jīng)回溯到了上一個(gè)版本那么怎么回到當(dāng)前版本呢(git bash窗口還沒(méi)關(guān)閉可以挽救),git reset --hard commit-id(git log可查看)。如果git bash窗口關(guān)閉了那么可以用git reflog查看歷史commit-id
git工作區(qū):例如用git init創(chuàng)建的一個(gè)倉(cāng)庫(kù)
git版本庫(kù):git工作區(qū)有一個(gè)隱藏的.git文件,他不算工作區(qū)而是版本庫(kù),Git的版本庫(kù)里存了很多東西,其中最重要的就是稱(chēng)為stage(或者叫index)的暫存區(qū),還有Git為我們自動(dòng)創(chuàng)建的第一個(gè)分支master,以及指向master的一個(gè)指針叫HEAD。前面修改文本文件or提交都是在緩存區(qū)里面進(jìn)行的。
git修改:第一次修改>git add? name>git commit -m'注釋'.?第一次修改>git add? name>第二次修改>git add name>git commit -m'注釋'.
git刪除:git rm aa.txt(刪除文檔文件aa.txt) git commit -m'remove aa.txt'(刪除提交記錄)
git遠(yuǎn)程倉(cāng)庫(kù):首先需要一個(gè)GitHub賬號(hào),在git-bash上 git remote add origin ssh(GitHub上復(fù)制)。本地倉(cāng)庫(kù)和GitHub遠(yuǎn)程倉(cāng)庫(kù)關(guān)聯(lián)git push -u origin master(公鑰是必要的:https://gitscm.com/book/zh/v1/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E7%94%9F%E6%88%90-SSH-%E5%85%AC%E9%92%A5有詳細(xì)介紹)
git分支管理:git checkout -b dev(創(chuàng)建新分支并進(jìn)入) git branch dev(創(chuàng)建分支) git checkout master(分支切換)? git branch(查看分支及當(dāng)前分支“ *”辨識(shí))?git merge dev(合并分支) git branch -d dev(刪除一條分支)??
git分支沖突:有些時(shí)候分支和master分支合并的時(shí)候并不是每個(gè)都可以快速合并的例如:在dev分支上修改了aa.txt又在master上修改了aa.txt。并且修改的是不一樣的,這個(gè)時(shí)候需要手動(dòng)修改成為相同的。當(dāng)合并出現(xiàn)這個(gè)情況時(shí):CONFLICT (content): Merge conflict in aa.txt Automatic merge failed; fix conflicts and then commit the result.便是有沖突。git status可以告訴我們沖突的文件。git log --graph --pretty=oneline --abbrev-commit(可以查看合并情況)。
前面有說(shuō)到分支快速合并,但是快速合并會(huì)丟失分支信息。在工作中都是在dev分支中做工作然后合并在master分支上,多人合作時(shí)快速合并會(huì)造成一些麻煩所以要避免這種情況:git merge --no-ff -m"new branch"(這樣合并能夠在git log graph --pretty=oneline --abbrev-commit(查看分支合并的歷史記錄))
bug分支:在正常工作中往往會(huì)遇到bug所有需要先放下手頭的工作去解決bug,首先需要git stash(把工作場(chǎng)存起來(lái))再創(chuàng)建一個(gè)bug分支對(duì)bug進(jìn)行處理,處理完成后再合并分支。這時(shí)候假如剛剛的工作還沒(méi)做完需要繼續(xù)那么怎么才能繼續(xù)呢?git stash list(查看保存起來(lái)的工作場(chǎng)地),接下來(lái)就是恢復(fù)工作場(chǎng)地:1、git stash apply(恢復(fù)工作場(chǎng)地,但是git stash list記錄不會(huì)刪除需要手動(dòng)刪除:git stash drop)。2、git stash pop(恢復(fù)工作場(chǎng)地并刪除list里面的)
強(qiáng)行刪除分支:git branch -D <name>
多人合作:在開(kāi)發(fā)中一個(gè)項(xiàng)目往往需要很多人一起合作完成,假如你在做一個(gè)項(xiàng)目需要clone一個(gè)遠(yuǎn)程庫(kù),然而只能clone master分支,但是工作需要在dev分支上所以你得創(chuàng)建一個(gè)dev分支:git branch origin/dev。在工作完成后git push origin dev,假如這個(gè)時(shí)候你的同事也和你修改了同一個(gè)文檔并在push就會(huì)產(chǎn)生前面說(shuō)的分支沖突,這時(shí)候:git push origin devTogithub.com:michaelliao/learngit.git ! [rejected] dev -> dev (non-fast-forward)error: failedtopushsomerefsto'git@github.com:michaelliao/learngit.git'hint: Updates were rejected because the tipofyourcurrentbranchisbehindhint: its remote counterpart. Integrate the remote changes (e.g.hint:'git pull ...') before pushing again.hint: See the'Note about fast-forwards'in'git push --help'fordetails,根據(jù)提示git pull(獲取origin/dev的文檔),并手動(dòng)修改分支沖突再push。