1委粉、項(xiàng)目提交遠(yuǎn)程
git init // 初始化git
git remote add origin 遠(yuǎn)程url // 添加源
git branch 分支名 // 本地創(chuàng)建一個(gè)分支
git checkout 分支名 // 切分支
git push origin master // 提交到遠(yuǎn)程庫
git push -u origin master // git第一次提交
git push -u origin master -f // git強(qiáng)制提交到遠(yuǎn)程
2添寺、git stash 緩存
git stash save '內(nèi)容' // 緩存并標(biāo)注注釋
git stash show // 展示修改過的文件
git stash list // 查看緩存列表
git stash apply index // 釋放緩存列表
git stash drop stash@{number} // 刪除指定的緩存
git stash clear // 刪除所有的stash緩存
git stash list // 展示緩存的列表
3、git clone
git clone <版本庫的網(wǎng)址> // 從遠(yuǎn)程克隆一個(gè)版本庫(支持多協(xié)議)
4、git remote
git remote // 列出所以遠(yuǎn)程主機(jī)
git remote -v // 查看遠(yuǎn)程主機(jī)的網(wǎng)址
git remote show <主機(jī)名> // 查看源<查看主機(jī)的詳細(xì)信息>
git remote add <主機(jī)名> // 添加遠(yuǎn)程主機(jī)
git remote rm <主機(jī)名> // 刪除遠(yuǎn)程主機(jī)
git remote rename <原主機(jī)名> <新主機(jī)名> // 遠(yuǎn)程主機(jī)改名
5角寸、git fetch
git fetch <遠(yuǎn)程主機(jī)名> <分支名> // 取回所有分支(branch)的更新(指定分支名)
git branch -r // -r 查看遠(yuǎn)程分支 -a選項(xiàng)查看所有分支
git checkout -b feature-B origin/master // 在master的基礎(chǔ)上創(chuàng)建一個(gè)新分支
git merge 和 git rebase // 在本地分支上合并遠(yuǎn)程分支
6、git pull
git pull <遠(yuǎn)程主機(jī)> <遠(yuǎn)程分支名>:<本地分支名> // 取回遠(yuǎn)程主機(jī)某個(gè)分支 和本地的指定分支合并
// 例 git pull origin master:master 簡(jiǎn)為 git pull origin master 簡(jiǎn)為 git pull origin 簡(jiǎn)為 git pull
// 分解 git fetch origin + git merge origin/master
git pull --rebase <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名> // rebase選項(xiàng)
7意述、git push
git push <遠(yuǎn)程主機(jī)> <本地分支名>:<遠(yuǎn)程分支名>
git push origin master:master|git push origin :master|git push origin|git push
git push -u origin master (-f)// 第一次提交的時(shí)候(強(qiáng)制提交的時(shí)候)
git push --all origin // 將所有的本地分支都推到遠(yuǎn)程主機(jī)
git push --force origin // 強(qiáng)制推送遠(yuǎn)程(盡量避免使用)
git push origin --tags // 打tages標(biāo)簽
8浴栽、git tag(標(biāo)注版本打tag)
git tag // 查看版本
git tag 標(biāo)簽名 // 為歷史版本打標(biāo)簽
git tag 標(biāo)簽名 該版本ID // 為歷史版本打標(biāo)簽
git tag -a 標(biāo)簽名 -m '標(biāo)簽說明' [可選:版本ID] // 創(chuàng)建版本(指定標(biāo)簽打tag)
git tag -d 標(biāo)簽名 // 刪除版本
git tag -r // 查看遠(yuǎn)程版本
git show 標(biāo)簽名 // 查看某一標(biāo)簽
9、回退版本撤銷
// HEAD: 當(dāng)前版本 HEAD^: 上一個(gè)版本 --hard: 參數(shù)會(huì)拋棄當(dāng)前工作區(qū)的修改 --soft: 參數(shù)的話會(huì)回退到之前版
git reset HEAD . // 撤銷所有add文件 add撤銷
git reset HEAD -filename // 撤銷單個(gè)add文件
git reset --soft head // 只回退commit信息 commit撤銷
git reset --hard head^ // 徹底回退到上次commit版本涎劈,不保留修改代碼
git log 查看commit信息 // git push 撤銷
git revert 以前commit的id
git push 此時(shí)本地回滾的代碼到服務(wù)器 // over
git checkout [merge操作時(shí)所在的分支] // git merge 撤銷
git reset --hard [merge前的版本號(hào)] // over
git checkout . // 撤銷所有本地改動(dòng)代碼
git reset --hard 遠(yuǎn)程倉庫名 // 本地代碼回退到與git遠(yuǎn)程倉庫一致
git reset --hard HEAD/commit_id // 回滾到歷史版本
git reset --hard HEAD^ // 回退到上個(gè)版本(HEAD^^ 上上版本)
10广凸、查詢有關(guān)
git status // 查詢創(chuàng)庫狀態(tài)
git diff 文件名 // 比較文件差異(在git add之前使用)
git log // 查看倉庫歷史記錄(詳細(xì))
git reflog // 查看所有版本的commit ID
git 命令詳解
現(xiàn)在我們有了本地和遠(yuǎn)程的版本庫,讓我們來試著用用Git的基本命令:
git pull:(從其他的版本庫(既可以是遠(yuǎn)程的也可以是本地的)將代碼更新到本地蛛枚,例如:'git pull origin master'就是將origin這個(gè)版本庫的代碼更新到本地的master主枝谅海,該功能類似于SVN的update
git add:是將當(dāng)前更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示記入了版本歷史中蹦浦,這也是提交之前所需要執(zhí)行的一步扭吁,例如'git add app/model/user.rb'就會(huì)增加app/model/user.rb文件到Git的索引中,該功能類似于SVN的add
git rm:從當(dāng)前的工作空間中和索引中刪除文件盲镶,例如'git rm app/model/user.rb'智末,該功能類似于SVN的rm、del
git commit:提交當(dāng)前工作空間的修改內(nèi)容徒河,類似于SVN的commit命令系馆,例如'git commit -m story #3, add user model',提交的時(shí)候必須用-m來輸入一條提交信息顽照,該功能類似于SVN的commit
git push:將本地commit的代碼更新到遠(yuǎn)程版本庫中由蘑,例如'git push origin'就會(huì)將本地的代碼更新到名為orgin的遠(yuǎn)程版本庫中
git log:查看歷史日志,該功能類似于SVN的log
git revert:還原一個(gè)版本的修改代兵,必須提供一個(gè)具體的Git版本號(hào)尼酿,例如'git revert bbaf6fb5060b4875b18ff9ff637ce118256d6f20',Git的版本號(hào)都是生成的一個(gè)哈希值
上面的命令幾乎都是每個(gè)版本控制工具所公有的植影,下面就開始嘗試一下Git獨(dú)有的一些命令:
git branch:對(duì)分支的增裳擎、刪、查等操作思币,例如'git branch new_branch'會(huì)從當(dāng)前的工作版本創(chuàng)建一個(gè)叫做new_branch的新分支鹿响,'git branch -D new_branch'就會(huì)強(qiáng)制刪除叫做new_branch的分支,'git branch'就會(huì)列出本地所有的分支
git checkout:Git的checkout有兩個(gè)作用谷饿,其一是在不同的branch之間進(jìn)行切換惶我,例如'git checkout new_branch'就會(huì)切換到new_branch的分支上去;另一個(gè)功能是還原代碼的作用博投,例如'git checkout app/model/user.rb'就會(huì)將user.rb文件從上一個(gè)已提交的版本中更新回來绸贡,未提交的內(nèi)容全部會(huì)回滾
git rebase:用下面兩幅圖解釋會(huì)比較清楚一些,rebase命令執(zhí)行后,實(shí)際上是將分支點(diǎn)從C移到了G听怕,這樣分支也就具有了從C到G的功能
git reset:將當(dāng)前的工作目錄完全回滾到指定的版本號(hào)捧挺,假設(shè)如下圖,我們有A-G五次提交的版本尿瞭,其中C的版本號(hào)是 bbaf6fb5060b4875b18ff9ff637ce118256d6f20松忍,我們執(zhí)行了'git reset bbaf6fb5060b4875b18ff9ff637ce118256d6f20'那么結(jié)果就只剩下了A-C三個(gè)提交的版本
git stash:將當(dāng)前未提交的工作存入Git工作棧中,時(shí)機(jī)成熟的時(shí)候再應(yīng)用回來筷厘,這里暫時(shí)提一下這個(gè)命令的用法鸣峭,后面在技巧篇會(huì)重點(diǎn)講解
git config:利用這個(gè)命令可以新增、更改Git的各種設(shè)置酥艳,例如'git config branch.master.remote origin'就將master的遠(yuǎn)程版本庫設(shè)置為別名叫做origin版本庫摊溶,后面在技巧篇會(huì)利用這個(gè)命令個(gè)性化設(shè)置你的Git,為你打造獨(dú)一無二的 Git
git tag:可以將某個(gè)具體的版本打上一個(gè)標(biāo)簽充石,這樣你就不需要記憶復(fù)雜的版本號(hào)哈希值了莫换,例如你可以使用'git tag revert_version bbaf6fb5060b4875b18ff9ff637ce118256d6f20'來標(biāo)記這個(gè)被你還原的版本,那么以后你想查看該版本時(shí)骤铃,就可以使用 revert_version標(biāo)簽名拉岁,而不是哈希值了
Git 之所以能夠提供方便的本地分支等特性,是與它的文件存儲(chǔ)機(jī)制有關(guān)的惰爬。Git存儲(chǔ)版本控制信息時(shí)使用它自己定義的一套文件系統(tǒng)存儲(chǔ)機(jī)制喊暖,在代碼根目錄下有一個(gè).git文件夾,會(huì)有如下這樣的目錄結(jié)構(gòu):
有幾個(gè)比較重要的文件和目錄需要解釋一下:HEAD文件存放根節(jié)點(diǎn)的信息撕瞧,其實(shí)目錄結(jié)構(gòu)就表示一個(gè)樹型結(jié)構(gòu)陵叽,Git采用這種樹形結(jié)構(gòu)來存儲(chǔ)版本信息,那么HEAD就表示根丛版;refs目錄存儲(chǔ)了你在當(dāng)前版本控制目錄下的各種不同引用(引用指的是你本地和遠(yuǎn)程所用到的各個(gè)樹分支的信息)巩掺,它有heads、remotes页畦、stash胖替、tags四個(gè)子目錄,分別存儲(chǔ)對(duì)不同的根豫缨、遠(yuǎn)程版本庫独令、Git棧和標(biāo)簽的四種引用,你可以通過命令'git show-ref'更清晰地查看引用信息州胳;logs目錄根據(jù)不同的引用存儲(chǔ)了日志信息记焊。因此逸月,Git只需要代碼根目錄下的這一個(gè).git目錄就可以記錄完整的版本控制信息栓撞,而不是像SVN那樣根目錄和子目錄下都有.svn目錄。那么下面就來看一下Git與SVN的區(qū)別吧