git 使用

git工作流程圖

Workspace:工作區(qū)
Index / Stage:暫存區(qū)/緩沖區(qū)
Repository:倉(cāng)庫(kù)區(qū)(或本地倉(cāng)庫(kù))
Remote:遠(yuǎn)程倉(cāng)庫(kù)

1.配置:

$ git config --global user.name "rui"
$ git config --global user.email "guangruiw@163.com"

2. git 基本命令

$ git clone <repo>   //從git 倉(cāng)庫(kù)拉取代碼
$ git status   //查看當(dāng)前目錄布朦,提交之后是否有新的修改
$ git add <filename>  //添加到緩沖區(qū)统翩, -u將tarck到的全部添加到緩沖區(qū)
$ git diff  // 查看執(zhí)行給git status 的結(jié)果的詳細(xì)信息,尚未緩存的改動(dòng), --cached 查看已緩存的改動(dòng)停巷,-- stat :顯示摘要
$ git diff <filename>  //產(chǎn)看文件的具體 改動(dòng)
$ git diff HEAD  //查看本地工作區(qū)和版本庫(kù)之間的差異
$ git diff HEAD^  //查看本地工作區(qū)和上一個(gè)版本之間的差異
$ git commit -m "message"  //將緩沖區(qū)添加到本地倉(cāng)庫(kù)中抢肛,并添加注釋
$ git commit -a  // 提交所有改變的內(nèi)容,直接到倉(cāng)庫(kù)區(qū)
$ git commit -v  //提交時(shí)顯示所有diff信息
$ git commit --amend -m [message]  //使用一次新的commit僵闯,替代上一次提交翔横,如果代碼沒(méi)有任何新變化缅刽,則用來(lái)改寫(xiě)上一次commit的提交信息
$ git commit --amend [file1] [file2] ...  //重做上一次commit啊掏,并包括指定文件的新變化
$ git rm <file>  //刪除文件
$ git rm -f <file>  //刪除之前已經(jīng)修改并且放到緩沖區(qū),需要強(qiáng)制的刪除
$ git rm --cached <file>  //只刪除緩沖區(qū)文件衰猛,仍保留在當(dāng)前的工作目錄中
$ git mv <sourchfile> <targetfile>  //移動(dòng)或重命名文件迟蜜,目錄,軟連接
$ git tag -a v1.0   //創(chuàng)建一個(gè)帶注解的標(biāo)簽

3. git 分支管理

$ git branch   //列出分支
$ git branch <branchname>  //創(chuàng)建分支
$ git branch -r   //查看遠(yuǎn)程分支
$ git branch -a   //查看本地和遠(yuǎn)程的所有分支\
$ git checkout <branchname>   //切換分支
$ git checkout -b <branchname>  //創(chuàng)建分支并立即切換到該分支下面
$ git branch -d <branchname>  //刪除分支
$ git checkout –b dev origin/dev  //創(chuàng)建本地dev分支并將遠(yuǎn)程的origin的dev分支到本地來(lái)啡省,
$ git merge <branchname>   //將branchname分支合并到當(dāng)前分支下面(當(dāng)前分支認(rèn)可合并所有分支的所有修改娜睛,合并沖突時(shí),需要手動(dòng)修改沖突文件卦睹,然后再用git add 和 git commit
$ git stash  //隱藏當(dāng)前的工作現(xiàn)場(chǎng)(等待恢復(fù)后繼續(xù)任務(wù))畦戒,執(zhí)行該命令后(git status 命令查看是沒(méi)有任何的改動(dòng)的)可以創(chuàng)建其他分支用于進(jìn)行其他的任務(wù)
$ git stash list  //查看git stash隱藏的工作現(xiàn)場(chǎng)
$ git stash apply  //恢復(fù)后,stash內(nèi)容并不刪除结序,你需要使用命令git stash drop來(lái)刪除障斋。
$ git stash pop  //恢復(fù)的同時(shí)把stash內(nèi)容也刪除了。

4. git版本控制

$ git log   //最新修改在最前面
$ git log --oneline  //查看歷史記錄的簡(jiǎn)潔版本
$ git log --graph   //查看歷史記錄
$ git log --reverse   //逆向顯示所有日志
$ git log --author=rui   //查看指定用戶(hù)提交的日志
$ git reset --hard HEAD^  //返回到上一個(gè)版本,回退到上上個(gè)版本只需把HEAD^ 改成 HEAD^^ 以此類(lèi)推
$ git reset --hard HEAD~100  //回退到前一百個(gè)版本
$ git reset --hard <版本號(hào)>  //回退到指定的版本
$ git rebase origin/master  //直接和遠(yuǎn)端的master分支之間rebase
$ git rebase master  //和本地的master分支之間rebase(本地master和遠(yuǎn)端的master之間可能不是同步的)

reset 三種模式的區(qū)別

  1. --hard:重置位置的同時(shí),直接將 working Tree工作目錄垃环、 index 暫存區(qū)及 repository 都重置成目標(biāo)Reset節(jié)點(diǎn)的內(nèi)容,所以效果看起來(lái)等同于清空暫存區(qū)和工作區(qū)邀层。

(1) 要放棄目前本地的所有改變時(shí),即去掉所有add到暫存區(qū)的文件和工作區(qū)的文件晴裹,可以執(zhí)行 git reset -hard HEAD 來(lái)強(qiáng)制恢復(fù)git管理的文件夾的內(nèi)容及狀態(tài)被济;(2) 真的想拋棄目標(biāo)節(jié)點(diǎn)后的所有commit(可能覺(jué)得目標(biāo)節(jié)點(diǎn)到原節(jié)點(diǎn)之間的commit提交都是錯(cuò)了,之前所有的commit有問(wèn)題)涧团。

  1. --soft:重置位置的同時(shí)只磷,保留working Tree工作目錄和index暫存區(qū)的內(nèi)容,只讓repository中的內(nèi)容和 reset 目標(biāo)節(jié)點(diǎn)保持一致泌绣,因此原節(jié)點(diǎn)和reset節(jié)點(diǎn)之間的【差異變更集】會(huì)放入index暫存區(qū)中(Staged files)钮追。所以效果看起來(lái)就是工作目錄的內(nèi)容不變,暫存區(qū)原有的內(nèi)容也不變阿迈,只是原節(jié)點(diǎn)和Reset節(jié)點(diǎn)之間的所有差異都會(huì)放到暫存區(qū)中元媚。

原節(jié)點(diǎn)和reset節(jié)點(diǎn)之間的【差異變更集】會(huì)放入index暫存區(qū)中(Staged files),所以假如我們之前工作目錄沒(méi)有改過(guò)任何文件苗沧,也沒(méi)add到暫存區(qū)刊棕,那么使用reset --soft后,我們可以直接執(zhí)行 git commit 將 index暫存區(qū)中的內(nèi)容提交至 repository 中待逞。為什么要這樣呢甥角?這樣做的使用場(chǎng)景是:假如我們想合并「當(dāng)前節(jié)點(diǎn)」與「reset目標(biāo)節(jié)點(diǎn)」之間不具太大意義的 commit 記錄(可能是階段性地頻繁提交,就是開(kāi)發(fā)一個(gè)功能的時(shí)候,改或者增加一個(gè)文件的時(shí)候就commit识樱,這樣做導(dǎo)致一個(gè)完整的功能可能會(huì)好多個(gè)commit點(diǎn)嗤无,這時(shí)假如你需要把這些commit整合成一個(gè)commit的時(shí)候)時(shí),可以考慮使用reset --soft來(lái)讓 commit 演進(jìn)線圖較為清晰怜庸〉狈福總而言之,可以使用--soft合并commit節(jié)點(diǎn)割疾。

  1. --mixed(默認(rèn)):重置位置的同時(shí)嚎卫,只保留Working Tree工作目錄的內(nèi)容,但會(huì)將 Index暫存區(qū) 和 Repository 中的內(nèi)容更改和reset目標(biāo)節(jié)點(diǎn)一致宏榕,因此原節(jié)點(diǎn)和Reset節(jié)點(diǎn)之間的【差異變更集】會(huì)放入Working Tree工作目錄中驰凛。所以效果看起來(lái)就是原節(jié)點(diǎn)和Reset節(jié)點(diǎn)之間的所有差異都會(huì)放到工作目錄中〉F耍總之工作目錄的修改恰响、暫存區(qū)的內(nèi)容以及由 reset 所導(dǎo)致的新的文件差異,都會(huì)被放進(jìn)工作目錄

(1)使用完reset --mixed后涌献,我們可以直接執(zhí)行 git add 將這些改變果的文件內(nèi)容加入 index 暫存區(qū)中胚宦,再執(zhí)行 git commit 將 Index暫存區(qū) 中的內(nèi)容提交至Repository中,這樣一樣可以達(dá)到合并commit節(jié)點(diǎn)的效果(與上面--soft合并commit節(jié)點(diǎn)差不多,只是多了git add添加到暫存區(qū)的操作)枢劝;(2)移除所有Index暫存區(qū)中準(zhǔn)備要提交的文件(Staged files)井联,我們可以執(zhí)行 git reset HEAD 來(lái) Unstage 所有已列入 Index暫存區(qū) 的待提交的文件。(有時(shí)候發(fā)現(xiàn)add錯(cuò)文件到暫存區(qū)您旁,就可以使用命令)烙常。(3)commit提交某些錯(cuò)誤代碼,或者沒(méi)有必要的文件也被commit上去鹤盒,不想再修改錯(cuò)誤再commit(因?yàn)闀?huì)留下一個(gè)錯(cuò)誤commit點(diǎn))蚕脏,可以回退到正確的commit點(diǎn)上,然后所有原節(jié)點(diǎn)和reset節(jié)點(diǎn)之間差異會(huì)返回工作目錄侦锯,假如有個(gè)沒(méi)必要的文件的話就可以直接刪除了驼鞭,再commit上去就OK了。

使用fetch更新倉(cāng)庫(kù)

//方法一
$ git fetch origin master //從遠(yuǎn)程的origin倉(cāng)庫(kù)的master分支下載代碼到本地的>origin master
$ git log -p master.. origin/master//比較本地的倉(cāng)庫(kù)和遠(yuǎn)程參考的區(qū)別
$ git merge origin/master//把遠(yuǎn)程下載下來(lái)的代碼合并到本地倉(cāng)庫(kù)尺碰,遠(yuǎn)程的和>本地的合并
//方法二
$ git fetch origin master:temp //從遠(yuǎn)程的origin倉(cāng)庫(kù)的master分支下載到本地>并新建一個(gè)分支temp
$ git diff temp//比較master分支和temp分支的不同
$ git merge temp//合并temp分支到master分支
$ git branch -d temp//刪除temp

git fetch 后可以使用git log FETCH_HEAD產(chǎn)看差異
可以使用git merge命令或者git rebase命令挣棕,在本地分支上合并遠(yuǎn)程分支。 git merge origin/master 或者git rebase origin/master表示在當(dāng)前分支上亲桥,合并origin/master

5. 替換本地改動(dòng)

$ git checkout -- filename  //丟棄工作區(qū)的修改洛心,不會(huì)影響已經(jīng)提交到緩沖區(qū)的內(nèi)容。指令先從緩存區(qū)中拉取版本還原题篷,如果沒(méi)有再到版本庫(kù)中拉取還原词身。
$ git fetch origin   //丟棄本地的所有改動(dòng)和提交,到服務(wù)器上獲取最新的的版本歷史
$ git reset --hard origin:master   //切換到拉到本地時(shí)的master
$ git pull <遠(yuǎn)程主機(jī)名><遠(yuǎn)程分支名>:<本地分支名>   //在工作目錄獲取并合并遠(yuǎn)端的改動(dòng)
$ git fetch origin 遠(yuǎn)程分支:本地分支   //拉取遠(yuǎn)程分支并創(chuàng)建本地分支
$ git pull [remote] [branch]  //取回遠(yuǎn)程倉(cāng)庫(kù)的變化悼凑,并與本地分支合并

git pull和 git fetch 跟著一個(gè) git merge FETCH_HEAD實(shí)現(xiàn)的功能一樣,原理不一樣

6.刪除恢復(fù)文件

$ git rm fillename  //刪除指定文件
$ git rm 

使用rm filename刪除文件后使用git status查看的時(shí)候能發(fā)現(xiàn)璧瞬,只是在工作區(qū)刪除了文件户辫,操作并沒(méi)有被add到緩存區(qū),可以是使用git checkout -- filename來(lái)恢復(fù)文件到工作區(qū)嗤锉,或使用git add 來(lái)將刪除提交到緩沖區(qū)渔欢。
使用git rm fillename刪除文件,指令執(zhí)行之后git status查看的時(shí)候發(fā)現(xiàn)刪除操作已經(jīng)add到了緩沖區(qū)這時(shí)候要恢復(fù)文件可以使用git reset head filename
執(zhí)行后將刪除的文件恢復(fù)到緩沖區(qū)后使用git checkout -- filename恢復(fù)文件到工作區(qū)
從效果上看rm filename + git add filename == git rm filename

7. 推送改動(dòng)

$ git remote   //列出遠(yuǎn)程主機(jī)名
$ git push <遠(yuǎn)程主機(jī)名><本地分支名>:<遠(yuǎn)程分支名>   //推動(dòng)到遠(yuǎn)端倉(cāng)庫(kù)
$ git push origin master  //將改動(dòng)提交到遠(yuǎn)端倉(cāng)庫(kù),可以把 master 換成你想要推送的任何分支

8. 子模塊

$ git clone --recursive  //

9:代碼提交示例:

$ git status  //查看修改
$ git add -u (git add <filename>)//將修改添加到緩沖區(qū)
$ git diff  //查看改動(dòng)瘟忱,確定是要提交的內(nèi)容
$ git commit -m "annotation"  //將緩沖區(qū)提交到了 HEAD奥额,并添加注釋
$ git push <遠(yuǎn)程主機(jī)名><本地分支名>:<遠(yuǎn)程分支名>   //推動(dòng)到遠(yuǎn)端倉(cāng)庫(kù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市访诱,隨后出現(xiàn)的幾起案子垫挨,更是在濱河造成了極大的恐慌,老刑警劉巖触菜,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件九榔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)哲泊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)剩蟀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人切威,你說(shuō)我怎么就攤上這事育特。” “怎么了先朦?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵缰冤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我烙无,道長(zhǎng)锋谐,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任截酷,我火速辦了婚禮涮拗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘迂苛。我一直安慰自己三热,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布三幻。 她就那樣靜靜地躺著就漾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪念搬。 梳的紋絲不亂的頭發(fā)上抑堡,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音朗徊,去河邊找鬼首妖。 笑死,一個(gè)胖子當(dāng)著我的面吹牛爷恳,可吹牛的內(nèi)容都是我干的有缆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了玄柠?” 一聲冷哼從身側(cè)響起昧诱,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡在刺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年逆害,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚣驼。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡魄幕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出颖杏,到底是詐尸還是另有隱情纯陨,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布留储,位于F島的核電站翼抠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏获讳。R本人自食惡果不足惜阴颖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丐膝。 院中可真熱鬧量愧,春花似錦、人聲如沸帅矗。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)浑此。三九已至累颂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間凛俱,已是汗流浹背紊馏。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蒲犬,地道東北人朱监。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像暖哨,于是被迫代替她去往敵國(guó)和親赌朋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凰狞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354