Git使用場景總結(jié)

屏幕快照 2016-12-12 上午10.26.20.png

當我第一次使用git的時候矛洞,我的內(nèi)心是拒絕的洼哎。第一次合并代碼的時候烫映,各種沖突搞的我焦頭爛額,但是當熟悉使用git之后噩峦,覺得已經(jīng)離不開它了锭沟,git真是是一個工作的好幫手。

關于git的介紹识补,配置族淮,使用,下面的這兩份教程講的也很詳細凭涂,git其實內(nèi)容很多祝辣,很強大,而我們平時工作中用于管理代碼只是使用了很少的一部分功能切油。

如果你對git還不熟悉蝙斜,看完這兩份教程,對git會有一個全面的了解澎胡,但是如何在具體的工作場景中使用可能還不知如何下手孕荠,我自己總結(jié)了平時工作中常用的命令,以及使用場景滤馍,分享一下岛琼。
<a title="Yahoo Search"> Pro Git(中文版) </a>
<a title="Yahoo Search"> Git 入門教程 </a>

場景一:當新建一個倉庫底循,如何把倉庫和本地建立起鏈接巢株。

這里我以碼云為例,當你在碼云新建一個倉庫之后熙涤。碼云上會給你提供倉庫的地址阁苞,會有兩個地址HTTPS和SSH,github也是一樣的祠挫。
關于密鑰的配置這里就不說了那槽,我只記錄一些命令行的使用。

第一步:添加遠程倉庫地址

git remote add origin git@github.com:JasonSparrow/BeautyImage.git

當你執(zhí)行完這個命令可能會報錯remote origin already exists等舔,意思就是你添加的這個origin已經(jīng)存在骚灸,此時需要執(zhí)行git remote remove origin,移除origin慌植,然后再次執(zhí)行git remote add origin git@github.com:JasonSparrow/BeautyImage.git甚牲,這樣就成功了。

第二步:把本地的工程push到遠程的倉庫蝶柿。
先執(zhí)行

git push -u origin master

如果報錯,則使用 git pull origin master, 把遠程的先同步到本地丈钙,再次使用git push -u origin master即可

屏幕快照 2016-12-08 下午11.19.52.png

如果看到這個內(nèi)容,那你就成功的把本地的內(nèi)容push到遠端了交汤。

場景二:分支創(chuàng)建與合并

git branch 分支名 //創(chuàng)建一個新的分支
git checkout 分支名   //切換分支

以上兩步等同于

git checkout -b 分支名  //新建分支雏赦,并切換過去

把新建的分支push到遠端

git push origin 分支名

這樣你的同事就可以看到你新建的分支了,此時你的同事就可以把這個遠端的分支拉取到本地。對于你和同事來說星岗,你們兩個人此時都有一個名稱相同的本地分支填大,假設分支名稱為1.0.0。

對于git的分布式版本管理來說俏橘,它是鼓勵你多建分支栋盹。因為1.0.0是大家共有的一個分支,它所負責的功能就是我們把1.0.0分支的修改拉取到本地與本地的合并敷矫,然后例获,再把合并好的1.0.0在推到遠端。每次在1.0.0上執(zhí)行pull曹仗,merge 榨汤,push操作時,我們每一個開發(fā)者都必須保證1.0.0是完全正確的怎茫,因為你的修改會影響到你的同事收壕,如果你這邊合并代碼之后,把他推到了遠端轨蛤,你的同事又把代碼拉取到本地蜜宪,此時發(fā)現(xiàn)代碼不能運行了,而別人還要等待你把錯誤的代碼修改好祥山,再次拉取正確的代碼才能工作圃验。這樣就會影響其他人工作。

所以缝呕,不建議直接在大家共有的1.0.0上直接進行代碼修改澳窑,而是大家都基于1.0.0分支各自再新建一個屬于自己的本地分支,假設同事A可以新建一個a_1.0.0供常,同事B可以新建一個b_1.0.0摊聋,我們每次只在自己的本地分支上修改,而不去修改大家共有的1.0.0栈暇,當我們把在本地分支上完成了本次修改麻裁,此時與1.0.0合并。然后push到遠端的倉庫源祈。這樣做并不能避免出錯煎源,只不過是減少了出錯的概率。

分支修改與合并

1新博、分支提交
對于我們開發(fā)某一個比較復雜的功能薪夕,也許不能一次把所有的功能都開發(fā)完,此時可以把一個功能拆分為不同的幾個小的功能赫悄。每完成一個小的功能我們就執(zhí)行一次提交原献,同多建分支一樣馏慨,我們也應該多次提交,這樣做方便與日后查看每次的提交內(nèi)容與某次提交出錯恢復在某次正確的提交姑隅。后面會講到写隶。千萬不要一下子修改了幾百個文件一下提交。這樣做如果出錯讲仰,對于自己和其他同事來說都是災難慕趴。
提交文件

git  add  文件名//把修改的文件提交到暫存區(qū)
git commit  -m  "填寫你提交的日志"http://把暫存區(qū)的內(nèi)容提交到倉庫

git add是提交單個文件,如果想一次提交所有文件可使用git add .鄙陡,這樣就一次提交了所有的修改文件冕房。如果想撤銷本次的add 文件可使用git reset HEAD 文件名, 撤銷添加到暫存區(qū)的文件

另外再次說一個概念,對于剛接觸git的同學來說趁矾,可能對于添加這個概念會有所誤解耙册。因為git每次保存的是你添加的內(nèi)容的一個指針,或者說你修改的一個指針毫捣。如果你新建文件详拙,這個叫做添加了文件或者修改了文件,你刪除了了文件這也叫添加了文件蔓同,刪除也是一種添加饶辙。

2、分支合并

工作中分支合并分為兩種情況

1斑粱、把另外一個分支合并到當前分支
2弃揽、把當前分支合并到另外一個分支

兩者的區(qū)別在于是否把當前的分支當做最終的合并后的版本。

假如現(xiàn)在本地有兩個分支1.0.0和a_1.0.0兩個分支珊佣。我們在a_1.0.0分支上開發(fā)新的功能蹋宦,提交修改到倉庫。此時需要把a_1.0.0分支合并到1.0.0分支咒锻。首先先使用git checkout branch切換到1.0.0分支,然后執(zhí)行git merge a_1.0.0命令守屉,就把a_1.0.0分支合并到1.0.0分支了惑艇。如果沒有沖突的,此時你就完成了本次合并拇泛。這種方式就是第一種合并方式滨巴,把另外一個分支合并到當前分支。

關于第二種合并方式俺叭,把當前分支合并到另外一個分支,我沒有用過終端命令,只在xcode自帶的版本管理操作過沈撞。xcode里面執(zhí)行merge from就是把一個分支合并到當前分支,執(zhí)行merge into就是把當前分支合并到另外一個分支耗跛。

場景三:回退到某次提交

1.穿越,回到過去

比如說你修改了某些文件攒发,但是中途發(fā)現(xiàn)這樣修改不好调塌,想要重新設計,對于此時來說惠猿,我們需要回到我們想要回到的那次修改的地方羔砾。也許有的人會覺得,我記住每次修改的內(nèi)容偶妖,把修改的刪除不就可以了嗎姜凄,如果你記憶力非常好,那沒問題趾访。但是如果修改的還有storyboard文件檀葛,如果修改的東西比較多,你能確保完全記得住腹缩,好記性不如一個爛筆頭屿聋。git 就是一個爛筆頭。
首先在終端里面輸入git log藏鹊, 會打印出最近的一些提交記錄润讥,這也是為甚說要多次提交,這也便于我們進行回退盘寡。

wangtengfeideMacBook-Pro:EasyMother Jason$ git log
commit 415f5d328fc73cf86dfad61fb423fdf61ff6541a
Author: 小飛hub <2678199009@qq.com>
Date:   Thu Dec 8 18:09:22 2016 +0800

    修改背景顏色

commit 1e44117e056517d14a1f5aceaf2e78269179e6ea
Author: 小飛hub <2678199009@qq.com>
Date:   Thu Dec 8 17:27:21 2016 +0800

    修改找月嫂背景顏色

commit 2292b7cfe68311ff3230d66eb9ada86b2f23e472
Author: 小飛hub <2678199009@qq.com>
Date:   Thu Dec 8 17:23:19 2016 +0800

    去除月嫂說

commit 039be98fe4e26f4c0ce603abf97ea64a4d8a6932
Author: 小飛hub <2678199009@qq.com>
Date:   Thu Dec 8 17:18:40 2016 +0800

    修改版本號

commit 4d30dd1f7a7bb7074822fd1f4c534f5ef86abfb6
Author: 小飛hub <2678199009@qq.com>
Date:   Thu Dec 8 10:42:21 2016 +0800

    提問專區(qū):標題改為選擇性填寫(不強制填寫)

commit 11a3adb47133959bce7ac6c7d612aa19046611be

假如此時我們想回退到修改版本號的地方git reset --hard 提交標記

回到修改版本號楚殿,如下所示

wangtengfeideMacBook-Pro:EasyMother Jason$ git reset --hard 039be98fe4e26f4c0ce603abf97ea64a4d8a6932 //修改版本號

然后就可以回退到修改版本號的地方,但此時在修改版本號以后的所有提交內(nèi)容也同樣會被清除掉竿痰。使用此命令需小心脆粥。

2.重返未來

重返未來和回到過去正好相反,前者回到以前的某次提交影涉,后者是回到未來的某次提交变隔。
剛才說到,執(zhí)行git reset --hard 提交標記命令蟹倾,會把這次提交之后的所有提交都會清除掉匣缘。假如你不消息誤操作執(zhí)行了這個命令,發(fā)現(xiàn)自己辛辛苦苦的工作一下都白費了鲜棠,要回到你當前提交版本的未來的某次提交(前提條件是你執(zhí)行了git reset --hard 提交標記肌厨,要不然,也不會有未來的提交)
首先在終端輸入git reflog
會打印出你最近操作的所欲的提交豁陆,合并等的記錄柑爸,如下(我只粘貼了一部分)

wangtengfeideMacBook-Pro:EasyMother Jason$ git reflog
c23f857 HEAD@{0}: reset: moving to c23f857
072c19b HEAD@{1}: reset: moving to 072c19bd6612ac680d7238ea3b593f279d54053f
c23f857 HEAD@{2}: commit: 添加注釋
072c19b HEAD@{3}: merge J_3.3.0: Fast-forward
a92613e HEAD@{4}: checkout: moving from J_3.3.0 to 3.3.0
072c19b HEAD@{5}: commit: 改為http請求
415f5d3 HEAD@{6}: commit: 修改背景顏色
1e44117 HEAD@{7}: commit: 修改找月嫂背景顏色
2292b7c HEAD@{8}: commit: 去除月嫂說
039be98 HEAD@{9}: commit: 修改版本號
f551e33 HEAD@{10}: commit: 緊急修復下單不能選擇地址的問題
2657843 HEAD@{11}: reset: moving to 26578435c6580b11472b4188e6027f3a695bf6df
23f84ea HEAD@{12}: commit: 添加聯(lián)系人地址
2657843 HEAD@{13}: commit: 用戶點擊自己頭像自動轉(zhuǎn)跳至時光中心
14f54dc HEAD@{14}: commit: 莫名其妙的會出現(xiàn)一根線
4d30dd1 HEAD@{15}: commit: 提問專區(qū):標題改為選擇性填寫(不強制填寫)
11a3adb HEAD@{16}: commit: 處理鍵盤通知
d12a83f HEAD@{17}: commit: 提問專區(qū)篩選箭頭圖標往右移,選中后顯示#FC7B99盒音,選了什么對應什么表鳍,
ee52989 HEAD@{18}: commit: 社區(qū)
6ef1f76 HEAD@{19}: commit: 社區(qū)搜搜
fc8457b HEAD@{20}: commit: 媽媽說點擊事件
ca39108 HEAD@{21}: commit: 月嫂說模塊
d4450b3 HEAD@{22}: commit: 媽媽說
4de8acf HEAD@{23}: commit: 查看大圖,添加中間的間隙
:

如剛才所說馅而,我們進行回退,回到了修改版本號的地方进胯,此時我們不想回到修改版本號的地方了用爪,我們想回到添加注釋的地方,如下

git reset --hard c23f857    //c23f857 HEAD@{2}: commit: 添加注釋

這樣就可以回到添加注釋的那次提交胁镐,在修改版本號和添加注釋直接的所有提交也會被恢復偎血。

場景四:文件暫存

假如我們本地有兩個分支,a和b盯漂,此時我們在b分支上正在開發(fā)功能颇玷,每次開發(fā)一部分就合并到a分支上,但是此時你的同事發(fā)現(xiàn)你合并的a分支有一個問題就缆,很嚴重帖渠,已經(jīng)影響了同事工作了,此時需要你緊急修復下竭宰。但是你在b分支上開發(fā)的功能才完成了一部分空郊,還有很多錯誤,此時又不想提交切揭。這個時候就可以先使用暫存狞甚,先把當前分支的修改暫存,切換到其他分支工作廓旬,然后在切換到暫存的分支哼审,把暫存區(qū)的內(nèi)容恢復,繼續(xù)開發(fā)孕豹。

首先在b分支上執(zhí)行

git stash  //把工作現(xiàn)場暫存

此時你就可以切換到a分支進行bug修復了
當bug修復完成涩盾,然后切換到b分支,執(zhí)行

git stash pop  //回到工作現(xiàn)場

場景五:恢復已經(jīng)刪除的本地分支步

這里說下我曾經(jīng)遇到的一個比較大的坑励背。由于修改的文件比較多春霍,在合并之前猜測就會產(chǎn)生很麻煩的沖突,所以椅野,我又建了一個分支终畅,用于合并測試。由于同事之間修改的Project文件內(nèi)容太多竟闪,導致Project文件沖突,在解決沖突時出了問題杖狼,當時猜測是把文件的引用給刪掉了炼蛤。導致合并失敗,一氣之下蝶涩,直接把用于測試的分支給強制刪除了理朋。本想著絮识,再建一個分支,再次合并嗽上。但是次舌,git卻告訴我,有一個未完成合并的分支兽愤,讓我必須完成合并才能繼續(xù)其他的操作彼念,一下我就懵逼了。

搞了一個上午才修復浅萧。其實也很簡單逐沙,只需要兩步就可以了。

1.使用git log -g 找回之前提交的commit
git log -g

這個命令是讓你找到你刪除的分支的某一次提交記錄洼畅,我在刪除的分支上進行了一次提交

  develop
wangtengfeideMacBook-Pro:EasyMother Jason$ git log -g
commit c23f857a1a08f338fe9b28e7bdbeb7da05586477
Reflog: HEAD@{0} (小飛hub <2678199009@qq.com>)
Reflog message: checkout: moving from JJ_3.3.0 to 3.3.0
Author: 小飛hub <2678199009@qq.com>
Date:   Mon Dec 12 09:16:38 2016 +0800

    添加注釋

commit 16201fcd6f2e5644f6df0815ad233f995d8f0f6e
Reflog: HEAD@{1} (小飛hub <2678199009@qq.com>)
Reflog message: commit: 添加文件
Author: 小飛hub <2678199009@qq.com>
Date:   Mon Dec 12 10:04:59 2016 +0800

    添加文件

commit c23f857a1a08f338fe9b28e7bdbeb7da05586477
Reflog: HEAD@{2} (小飛hub <2678199009@qq.com>)
Reflog message: checkout: moving from 3.3.0 to JJ_3.3.0
Author: 小飛hub <2678199009@qq.com>
Date:   Mon Dec 12 09:16:38 2016 +0800

    添加注釋
wangtengfeideMacBook-Pro:EasyMother Jason$ 

我在刪除的JJ_3.3.0分支上進行了一次提交吩案,添加文件

git branch recover_branch_abc 16201fcd6f2e5644f6df0815ad233f995d8f0f6e
2.使用git branch recover_branch_新分支 commit_id命令用這個commit創(chuàng)建一個分支
git branch recover_branch_abc 16201fcd6f2e5644f6df0815ad233f995d8f0f6e //添加文件的commit_id

然后使用git branch查看分支分支是否存在,如果成功將會出現(xiàn)一個新的分支recover_branch_abc帝簇,然后切換到recover_branch_abc分支徘郭,查看文件是否存在。
這樣就可以恢復被誤刪的分支了

場景六:刪除遠程分支

 //分支名丧肴, 這樣做只是刪除了本地的遠程分支的索引
git branch -r -d origin/hotfix/2.2.3  
//在執(zhí)行這句就完全刪除了(注意冒號残揉,要與origin留一個空格)
git push origin :hotfix/2.2.3          

關于git合并代碼產(chǎn)生沖突的問題我要發(fā)發(fā)牢騷,以前找工作的時候闪湾,總是有一些人說冲甘,你們?yōu)槭裁词褂胹toryboard,而不是用純代碼途样,使用storyboard會影響程序編譯速度江醇,不利于團隊開發(fā)之類的。我從第一天開始工作就開始使用storyboard開發(fā)何暇,合并代碼陶夜,當然會產(chǎn)生沖突,但是產(chǎn)生沖突最后都可以解決裆站,你解決不了的沖突不代表別人不能解決条辟,storyboard本質(zhì)上就是一個xml文件,我只能說宏胯,不擁抱新技術的人始終會被淘汰羽嫡,整天代碼寫那些布局有意思嗎?storyboard來畫界面肩袍,真心速度比純代碼快很多杭棵。
文章內(nèi)容為自己平時使用git遇到的一些情況,如果您有更好的方式處理這些問題氛赐,請留言斧正魂爪。

git 配置RSA
https://www.cnblogs.com/superGG1990/p/6844952.html
首先 cd 切換到用戶的目錄 我的用戶名是hr, 那我就切換到hr下
然后執(zhí)行ssh-keygen -t rsa -C "your_email@youremail.com"

然后 cd ~/.ssh,
打印 cat id_rsa.pub

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末先舷,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子滓侍,更是在濱河造成了極大的恐慌蒋川,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撩笆,死亡現(xiàn)場離奇詭異捺球,居然都是意外死亡,警方通過查閱死者的電腦和手機浇衬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門懒构,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人耘擂,你說我怎么就攤上這事胆剧。” “怎么了醉冤?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵秩霍,是天一觀的道長。 經(jīng)常有香客問我蚁阳,道長铃绒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任螺捐,我火速辦了婚禮颠悬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘定血。我一直安慰自己赔癌,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布澜沟。 她就那樣靜靜地躺著灾票,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茫虽。 梳的紋絲不亂的頭發(fā)上刊苍,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音濒析,去河邊找鬼正什。 笑死,一個胖子當著我的面吹牛号杏,可吹牛的內(nèi)容都是我干的埠忘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼馒索,長吁一口氣:“原來是場噩夢啊……” “哼莹妒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绰上,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤旨怠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后蜈块,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鉴腻,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年百揭,在試婚紗的時候發(fā)現(xiàn)自己被綠了爽哎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡器一,死狀恐怖课锌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情祈秕,我是刑警寧澤渺贤,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站请毛,受9級特大地震影響志鞍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜方仿,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一固棚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧仙蚜,春花似錦此洲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至艳丛,卻和暖如春匣掸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背氮双。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工碰酝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人戴差。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓送爸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子袭厂,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git墨吓,從https:/...
    落魂灬閱讀 12,663評論 4 54
  • Git是目前最流行的版本管理系統(tǒng),也是最先進的分布式版本控制系統(tǒng)(distributed version cont...
    pro648閱讀 5,705評論 1 17
  • 有朋友對我在加拿大的買房的經(jīng)歷有興趣纹磺,我在中國買過5套房帖烘,賣過四套房,在加拿大買過兩套橄杨,有一套即將出手秘症,租過房也出...
    Joyce的書房閱讀 558評論 0 0
  • 1. 向目標靠近 通往羅馬的路不止一條。所以想要達到目的式矫,也不止一條途徑乡摹。反其道而行之有時候不失為上上策。跟昨天晨...
    成為伍爾夫閱讀 217評論 0 2
  • 1 有一片花圃——其實叫草叢可能會更恰當——我天天去采转,卷著一本線裝書聪廉。那里不美,因而過往的人不多氏义,于是我可以避開一...
    晚米閱讀 769評論 14 12