Git

簡介(Git 分布式工作流程)

與傳統(tǒng)的集中式版本控制系統(tǒng)(CVCS)相反收班,Git 的分布式特性使得開發(fā)者間的協(xié)作變得更加靈活多樣。 在集中式系統(tǒng)中尤辱,每個(gè)開發(fā)者就像是連接在集線器上的節(jié)點(diǎn)锐锣,彼此的工作方式大體相像蛮寂。 而在 Git 中未蝌,每個(gè)開發(fā)者同時(shí)扮演著節(jié)點(diǎn)和集線器的角色——也就是說驮吱, 每個(gè)開發(fā)者既可以將自己的代碼貢獻(xiàn)到其他的倉庫中,同時(shí)也能維護(hù)自己的公開倉庫萧吠, 讓其他人可以在其基礎(chǔ)上工作并貢獻(xiàn)代碼左冬。 由此,Git 的分布式協(xié)作可以為你的項(xiàng)目和團(tuán)隊(duì)衍生出種種不同的工作流程;


Git 分布式開發(fā)示意圖

)

一.Git學(xué)習(xí)鏈接

Git的官方網(wǎng)站
MAC安裝
Windows

二. Git初始化

當(dāng)使用一臺(tái)新的機(jī)器纸型,且從沒有使用過git拇砰。

  1. 首先從官網(wǎng)下載Git工具,Xcode自帶不用下狰腌,Intellj工具族需要下載安裝除破。
  2. 安裝好執(zhí)行g(shù)it config --global user.name “xxx” 配置git賬戶名
  3. git config --global user.email 'xxx' 推薦 這里填寫你常用的郵箱賬號(hào)作為你git的賬戶name
  4. git config --global --edit //可以直接修改全局的用戶名和郵箱

三. 新建代碼工程

以iOS開發(fā)為例
1.桌面新建一個(gè)工程名稱為App 終端進(jìn)入App目錄
2.去GitHub網(wǎng)站建立自己的共有倉庫

注冊(cè)賬號(hào)之后新建倉庫.png
創(chuàng)建成功之后的頁面.png

3.Git初始化工程病進(jìn)行第一次提交
3.1終端操作

Last login: Tue Sep 12 10:54:52 on ttys003
hongjunzhangdeMacBook-Pro:~ hongjunzhang$ cd Desktop/App
hongjunzhangdeMacBook-Pro:app hongjunzhang$ ls
app     app.xcodeproj   appTests    appUITests
hongjunzhangdeMacBook-Pro:app hongjunzhang$ git init
hongjunzhangdeMacBook-Pro:app hongjunzhang$ git add README.md
hongjunzhangdeMacBook-Pro:app hongjunzhang$ git commit -m "first commit"
hongjunzhangdeMacBook-Pro:app hongjunzhang$ git remote add origin https://github.com/zhj1214/dasdsadasfa.git
hongjunzhangdeMacBook-Pro:app hongjunzhang$ git push -u origin master

3.2再啰嗦一句
之后的代碼修改和提交 請(qǐng)按照以下步驟:

git add .
git  commit -m'備注日志'
git pull
git push

四.多人合作處理沖突

多人合作時(shí)當(dāng)我們使用git pull合并他人代碼的時(shí)候有可能就會(huì)發(fā)生沖突

#使用git status查看那些文件有沖突
git status
# git diff 查看文件修改的內(nèi)容
git diff

Git用<<<<<<<,=======琼腔,>>>>>>>標(biāo)記出不同分支的內(nèi)容瑰枫,我們修改如下后保存:
4.1分別進(jìn)入到每一個(gè)文件中,手動(dòng)修改沖突的部位展姐。修改完畢后躁垛,執(zhí)行:

git add .
git commit -m'備注'
git pull
git push

4.2 某個(gè)文件你想使用對(duì)方/自己的版本

git checkout - -theirs xxx/A.js // 拋棄乙的版本剖毯,完全采用自己的
git checkout - -ours xxx/A.js// 拋棄自己的版本圾笨,保留乙的

Git官網(wǎng) 沖突操作

五.操作分支

  • 新建分支
    git branch 分支名(不會(huì)切換到新的分支)
    git checkout -b 分支名(會(huì)同時(shí)切換到新的分支)
  • 查看已有分支
    git branch -a
  • 切換分支
    git checkout 分支名
  • 將本地分支推到遠(yuǎn)端服務(wù)器
    git push --set-upstream origin xxx
  • 強(qiáng)制(覆蓋)推到遠(yuǎn)端倉庫
#把master分支內(nèi)容強(qiáng)制覆蓋遠(yuǎn)端master
git push -u origin master -f
#將本地dev分支強(qiáng)制覆蓋遠(yuǎn)端master分支
git push origin dev:master -f
  • 刪除遠(yuǎn)程分支
git push origin --delete 分支名字
  • 刷新本地分支
git remote update origin --prune
  • 刪除本地所有與遠(yuǎn)程倉庫同步分支(本地修改過未提交的不會(huì)刪除)
git branch |xargs git branch -d
  • git merge:


    master 合并了 xxx分支

六. commit日志

  • 你還可以通過打開引號(hào),按Enter并再次關(guān)閉帶引號(hào)的提交來實(shí)現(xiàn)相同的提交結(jié)構(gòu)逊谋,包括標(biāo)題和正文(多行)
git commit -m "commit title
>
> commit description"
  • 提交歷史紀(jì)錄
    git log
  • 提交版本記錄
    git reflog
  • 查看所有的提交記錄 以及完整的 git comitid
    git log --pretty=oneline
  • 用git log --graph命令可以看到分支合并圖
    git log --graph
  • 查看遠(yuǎn)端倉庫地址
    git remote -v
  • 合并某個(gè)節(jié)點(diǎn)的代碼
git cherry-pick c75b60957e0867d317cc783943519662824d42f4
  • 取消 上次的 commit (數(shù)組代表那一次)
git reset --soft HEAD~1
#reset 擴(kuò)展
至于這幾個(gè)參數(shù):
--mixed 
意思是:不刪除工作空間改動(dòng)代碼擂达,撤銷commit,并且撤銷git add . 操作
這個(gè)為默認(rèn)參數(shù),git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一樣的胶滋。
 
--soft  
不刪除工作空間改動(dòng)代碼板鬓,撤銷commit悲敷,不撤銷git add . 
 
--hard
刪除工作空間改動(dòng)代碼,撤銷commit俭令,撤銷git add . 
注意完成這個(gè)操作后后德,就恢復(fù)到了上一次的commit狀態(tài)。
 
git merge --abort 
如果合并報(bào)錯(cuò)有沖突則使用這個(gè)
 
順便說一下抄腔,如果commit注釋寫錯(cuò)了瓢湃,只是想改一下注釋,只需要:
git commit --amend
此時(shí)會(huì)進(jìn)入默認(rèn)vim編輯器赫蛇,修改注釋完畢后保存就好了绵患。

七. 版本回退

注意:版本回退在多人開發(fā)時(shí)一定到通知到所有人,讓大家刪除本地分支悟耘,重新拉去遠(yuǎn)端的分支代碼

# 回退到某個(gè)節(jié)點(diǎn)
git reset --hard xxx(版本記錄號(hào)comitId)
# 回退后 常規(guī)操作如下:
git add .
git commit -m''
git push;
#xxxx 推送到遠(yuǎn)端分支名稱
git push origin HEAD:xxxx -f

八. 跟蹤文件

#取消跟蹤文件
git update-index --assume-unchanged your_file_path
#繼續(xù)跟蹤文件
git update-index --no-assume-unchanged your_file_path

九. 創(chuàng)建標(biāo)簽

在Git中打標(biāo)簽非常簡單落蝙,首先,切換到需要打標(biāo)簽的分支上:
1.查看所有tag

git tag

2.增加標(biāo)簽
增加標(biāo)簽之前請(qǐng)先commit 當(dāng)前所有內(nèi)容暂幼,或找到歷史提交的commit id給指定記錄增加標(biāo)簽

#末尾可加 commit id, 這個(gè)id不是必須的
git tag -a v0.0.1 -m '第一個(gè)標(biāo)簽' <commit id>

注意筏勒,標(biāo)簽不是按時(shí)間順序列出,而是按字母排序的旺嬉∽嗾可以用git show <tagname>查看標(biāo)簽信息:
3.刪除標(biāo)簽

#刪除本地標(biāo)簽
git tag -d v1.0
#刪除遠(yuǎn)端標(biāo)簽
git push origin :refs/tags/v1.0

十一. rebase

  • 使用rebase 刪除指定commit記錄
git rebase -I xxxxxxxxxxxx
#解決沖突
git add .;
git commit -m’提交’
git push origin HEAD:xxx  -f

十二. 些常用命令

  • 移除遠(yuǎn)程提交的npm包文件
git rm --cached -r node_modules/ 
  • 誤刪恢復(fù)
#刪除文件 
rm -rf README.md  
#當(dāng)然可以撤銷 這個(gè)刪除恢復(fù)刪除的文件
git checkout -- README.md
  • git stash
    并不是你不想提交,而是工作只進(jìn)行到一半鹰服,還沒法提交病瞳,預(yù)計(jì)完成還需1天時(shí)間。但是悲酷,必須在兩個(gè)小時(shí)內(nèi)修復(fù)該bug套菜,怎么辦?幸好设易,Git還提供了一個(gè)stash功能逗柴,可以把當(dāng)前工作現(xiàn)場(chǎng)“儲(chǔ)藏”起來,等以后恢復(fù)現(xiàn)場(chǎng)后繼續(xù)工作:
#執(zhí)行存儲(chǔ)時(shí)顿肺,添加備注戏溺,方便查找,只有g(shù)it stash 也要可以的屠尊,但查找時(shí)不方便識(shí)別旷祸。
git stash save "save message"
#顯示做了哪些改動(dòng),默認(rèn)show第一個(gè)存儲(chǔ),如果要顯示其他存貯讼昆,后面加stash@{$num}托享,比如第二個(gè) git stash show stash@{1}
git stash show
#應(yīng)用某個(gè)存儲(chǔ),但不會(huì)把存儲(chǔ)從存儲(chǔ)列表中刪除,默認(rèn)使用第一個(gè)存儲(chǔ),即stash@{0},如果要使用其他個(gè)闰围,git stash apply stash@{$num} 赃绊, 比如第二個(gè):git stash apply stash@{1} 
git stash apply
#暫存列表
git stash list
#刪除并應(yīng)用   臟代碼
git stash pop stash@{0} 
#刪除這個(gè)臟代碼
git stash drop stash@{0}
#刪除所有緩存的stash
git stash clear

實(shí)際上,Git還有很多可配置項(xiàng)羡榴。

比如碧查,讓Git顯示顏色,會(huì)讓命令輸出看起來更醒目:
git config --global color.ui true

  • 快捷 方法
    有沒有經(jīng)常敲錯(cuò)命令校仑?比如git status么夫?status這個(gè)單詞真心不好記。
    如果敲git st就表示git status那就簡單多了肤视,當(dāng)然這種偷懶的辦法我們是極力贊成的档痪。
    我們只需要敲一行命令,告訴Git邢滑,以后st就表示status:
git config --global alias.st status
#最變態(tài)的 查看提交記錄方法 
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
  • 切換到遠(yuǎn)程分支
#列出所有分支名稱如下:
git branch -a
remotes/origin/dev
remotes/origin/release
#作用是checkout遠(yuǎn)程的dev分支腐螟,在本地起名為dev分支,并切換到本地的dev分支
git checkout -b dev origin/dev
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末困后,一起剝皮案震驚了整個(gè)濱河市乐纸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌摇予,老刑警劉巖汽绢,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異侧戴,居然都是意外死亡宁昭,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門酗宋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來积仗,“玉大人,你說我怎么就攤上這事蜕猫〖挪埽” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵回右,是天一觀的道長隆圆。 經(jīng)常有香客問我,道長翔烁,這世上最難降的妖魔是什么渺氧? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮租漂,結(jié)果婚禮上阶女,老公的妹妹穿的比我還像新娘颊糜。我一直安慰自己哩治,他們只是感情好秃踩,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著业筏,像睡著了一般憔杨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蒜胖,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天消别,我揣著相機(jī)與錄音,去河邊找鬼台谢。 笑死寻狂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的朋沮。 我是一名探鬼主播蛇券,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼樊拓!你這毒婦竟也來了纠亚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤筋夏,失蹤者是張志新(化名)和其女友劉穎蒂胞,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體条篷,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡骗随,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赴叹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蚊锹。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖稚瘾,靈堂內(nèi)的尸體忽然破棺而出牡昆,到底是詐尸還是另有隱情,我是刑警寧澤摊欠,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布丢烘,位于F島的核電站,受9級(jí)特大地震影響些椒,放射性物質(zhì)發(fā)生泄漏播瞳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一免糕、第九天 我趴在偏房一處隱蔽的房頂上張望赢乓。 院中可真熱鬧忧侧,春花似錦、人聲如沸牌芋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽躺屁。三九已至肯夏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間犀暑,已是汗流浹背驯击。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留耐亏,地道東北人徊都。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像广辰,于是被迫代替她去往敵國和親暇矫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git轨域,從https:/...
    落魂灬閱讀 12,649評(píng)論 4 54
  • 今天寫了一篇自己不擅長袱耽,也不了解的毛概作業(yè)——我論今日之中國國情。用典型實(shí)際說明社會(huì)主義制度的優(yōu)越性干发。 作為一名理...
    丹陽world閱讀 981評(píng)論 0 0
  • 在去接傻狗的路上朱巨。 最近一直在投簡歷,筆試這種焦慮中度過枉长,大學(xué)畢業(yè)的時(shí)候冀续,覺得自己找不到工作,選擇了考研必峰,研究生要...
    樹蔭下的檸檬閱讀 161評(píng)論 0 0