iOS開發(fā)-git使用

首先確定電腦安裝了git

輸入git
會(huì)產(chǎn)生提示:

如果沒有安裝,那么就網(wǎng)上搜索下載完成安裝.

可以使用命令行安裝崖飘,也可以下載工具包安裝

確定文件保存在自己的倉庫哪個(gè)地方

命令行:

cd (不會(huì)路徑列肢,把文件拖動(dòng)到這里)

添加文件到暫緩區(qū)

針對(duì)單一文件的添加:git add (文件名)

如果提示密碼郵箱

global的作用

配置全局的用戶名和密碼— 其他地方可以不配置
git config —global user.name “why"
git config —global user.emailwhy@163.com"
正對(duì)整個(gè)項(xiàng)目的文件添加 git add .

將暫緩區(qū)的文件添加到分支

git commit -m "文件注釋扩所,也就是這些添加你要做什么"

查看目前暫緩區(qū)的狀態(tài)

git status

回到歷史中

穿梭前菊值,用git log可以查看提交歷史抄淑,以便確定要回退到哪個(gè)版本猛遍。

回到未來

要重返未來馋记,用git reflog查看命令歷史号坡,以便確定要回到未來的哪個(gè)版本。
commit_id抗果。

版本回退:

git reset --hard (版本號(hào))

HEAD指向的版本就是當(dāng)前版本筋帖,因此,Git允許我們?cè)诎姹镜臍v史之間穿梭冤馏,使用命令git reset --hard

其他常用的git 命令

你做了修改后日麸,(還沒有對(duì)他進(jìn)行g(shù)it add .操作)放棄修改

git checkout -- file

例如:(對(duì)那個(gè)文件放棄修改)

git checkout -- readme.txt

撤銷已經(jīng)存在暫緩區(qū)的文件

git reset HEAD file可以把暫存區(qū)的修改撤銷掉(unstage)

假設(shè)你改錯(cuò)了東西,還從暫存區(qū)提交到了版本庫,直接使用上面的回到歷史中

一般團(tuán)隊(duì)開發(fā):要在分支進(jìn)行

git checkout -b dev

這個(gè)命令加上 -b 參數(shù)表示創(chuàng)建并切換相當(dāng)于

git branch dev
git checkout dev

查看當(dāng)前分支

git branch

這里在dev分支修改文件后逮光,提交(此處修改后的文件提交上去只是在dev分支上)

切換回主分支

git checkout master

git merge:合并指定分支到當(dāng)前分支

git merge dev

刪除dev分支

git branch -d dev

查看branch

git branch

上述分支主支一覽

Git鼓勵(lì)大量使用分支

查看分支:git branch

創(chuàng)建分支:git branch <name>

切換分支:git checkout <name>

創(chuàng)建+切換分支:git checkout -b <name>

合并某分支到當(dāng)前分支:git merge <name>

通常代箭,合并分支時(shí),如果可能涕刚,Git會(huì)用Fast forward模式嗡综,但這種模式下,刪除分支后杜漠,會(huì)丟掉分支信息

合并分支時(shí)极景,加上--no-ff參數(shù)就可以用普通模式合并,合并后的歷史有分支驾茴,能看出來曾經(jīng)做過合并盼樟,而fast forward合并就看不出來曾經(jīng)做過合并
git merge --no-ff -m "merge with no-ff" dev

刪除分支:git branch -d <name>

·1.推送分支 (這里origin是git默認(rèn)的主分支)
git push origin master

·2.推送其他分支
git push origin dev

例子簡介

多人協(xié)作的工作模式通常是這樣:

首先,可以試圖用git push origin branch-name推送自己的修改锈至;

如果推送失敗晨缴,則因?yàn)檫h(yuǎn)程分支比你的本地更新,需要先用git pull試圖合并峡捡;

如果合并有沖突击碗,則解決沖突,并在本地提交们拙;

沒有沖突或者解決掉沖突后稍途,再用git push origin branch-name推送就能成功!

如果git pull提示“no tracking information”睛竣,則說明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒有創(chuàng)建晰房,用命令git branch --set-upstream branch-name origin/branch-name。

這就是多人協(xié)作的工作模式射沟,一旦熟悉了,就非常簡單与境。

多人協(xié)作時(shí)验夯,大家都會(huì)往master和dev分支上推送各自的修改。

現(xiàn)在摔刁,模擬一個(gè)你的小伙伴挥转,可以在另一臺(tái)電腦(注意要把SSH Key添加到GitHub)或者同一臺(tái)電腦的另一個(gè)目錄下克隆:

$ git clone git@github.com:suny/learngit.git

Cloning into 'learngit'...

remote: Counting objects: 46, done.

remote: Compressing objects: 100% (26/26), done.

remote: Total 46 (delta 16), reused 45 (delta 15)

Receiving objects: 100% (46/46), 15.69 KiB | 6 KiB/s, done.

Resolving deltas: 100% (16/16), done.

當(dāng)你的小伙伴從遠(yuǎn)程庫clone時(shí),默認(rèn)情況下绑谣,你的小伙伴只能看到本地的master分支党窜。不信可以用git branch命令看看:

git branch

`* mas

現(xiàn)在,你的小伙伴要在dev分支上開發(fā)借宵,就必須創(chuàng)建遠(yuǎn)程origin的dev分支到本地幌衣,于是他用這個(gè)命令創(chuàng)建本地dev分支:

git checkout -b dev origin/dev

現(xiàn)在,他就可以在dev上繼續(xù)修改壤玫,然后豁护,時(shí)不時(shí)地把dev分支push到遠(yuǎn)程:

git commit -m "add /usr/bin/env"

[dev 291bea8] add /usr/bin/env

3 file changed, 1 insertion(+)

git push origin dev

Counting objects: 5, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (3/3), done.

Writing objects: 100% (3/3), 359 bytes, done.

Total 3 (delta 0), reused 0 (delta 0)

To git@github.com:suny/learngit.git
fc38031..291bea8 dev -> dev

你的小伙伴已經(jīng)向origin/dev分支推送了他的提交,而碰巧你也對(duì)同樣的文件作了修改欲间,并試圖推送:
git add hello.pygi

git commit -m "add coding: utf-8"

[dev bd6ae48] add coding: utf-8

3 file changed, 1 insertion(+)

git push origin dev

To git@github.com:suny/learngit.git

! [rejected] dev -> dev (non-fast-forward)
error: failed to push some refs to 'git@github.com:suny/learngit.git'

hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

推送失敗楚里,因?yàn)槟愕男』锇榈淖钚绿峤缓湍阍噲D推送的提交有沖突,解決辦法也很簡單猎贴,Git已經(jīng)提示我們班缎,先用git pull把最新的提交從origin/dev抓下來,然后她渴,在本地合并达址,解決沖突,再推送:
git pull

remote: Counting objects: 5, done.

remote: Compressing objects: 100% (3/3), done.

remote: Total 3 (delta 0), reused 3 (delta 0)

Unpacking objects: 100% (4/4), done.

From github.com:michaelliao/learngit

fc38031..291bea8 dev -> origin/dev

There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details

git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream dev origin/<branch>

git pull也失敗了惹骂,原因是沒有指定本地dev分支與遠(yuǎn)程origin/dev分支的鏈接苏携,根據(jù)提示,設(shè)置dev和origin/dev的鏈接:

多人協(xié)作

當(dāng)你從遠(yuǎn)程倉庫克隆時(shí)对粪,實(shí)際上Git自動(dòng)把本地的master分支和遠(yuǎn)程的master分支對(duì)應(yīng)起來了右冻,并且,遠(yuǎn)程倉庫的默認(rèn)名稱是origin著拭。

要查看遠(yuǎn)程庫的信息纱扭,用git remote:

git remote

origin

或者,用git remote -v顯示更詳細(xì)的信息:

git remote -v

origin git@github.com:suny/learngit.git (fetch)

origin git@github.com:suny/learngit.git (push)

上面顯示了可以抓取和推送的origin的地址儡遮。如果沒有推送權(quán)限乳蛾,就看不到push的地址。

推送分支

推送分支鄙币,就是把該分支上的所有本地提交推送到遠(yuǎn)程庫肃叶。推送時(shí),要指定本地分支十嘿,這樣因惭,Git就會(huì)把該分支推送到遠(yuǎn)程庫對(duì)應(yīng)的遠(yuǎn)程分支上:

git push origin master

如果要推送其他分支,比如dev绩衷,就改成:

git push origin dev

master分支是主分支蹦魔,因此要時(shí)刻與遠(yuǎn)程同步激率;

dev分支是開發(fā)分支,團(tuán)隊(duì)所有成員都需要在上面工作勿决,所以也需要與遠(yuǎn)程同步乒躺;

抓取分支

多人協(xié)作時(shí),大家都會(huì)往master和dev分支上推送各自的修改低缩。

現(xiàn)在嘉冒,模擬一個(gè)你的小伙伴,可以在另一臺(tái)電腦(注意要把SSH Key添加到GitHub)或者同一臺(tái)電腦的另一個(gè)目錄下克卤碇啤:

git clone git@github.com:suny/learngit.git

Cloning into 'learngit'...

remote: Counting objects: 46, done.

remote: Compressing objects: 100% (20/20), done.

remote: Total 46 (delta 16), reused 45 (delta 15)

Receiving objects: 100% (46/46), 105.69 KiB | 25 KiB/s, done.

Resolving deltas: 100% (19/19), done.

當(dāng)你的小伙伴從遠(yuǎn)程庫clone時(shí)健爬,默認(rèn)情況下,你的小伙伴只能看到本地的master分支么介。不信可以用git branch命令看看:

git branch

  • master

現(xiàn)在娜遵,你的小伙伴要在dev分支上開發(fā),就必須創(chuàng)建遠(yuǎn)程origin的dev分支到本地壤短,于是他用這個(gè)命令創(chuàng)建本地dev分支:

git checkout -b dev origin/dev

現(xiàn)在设拟,他就可以在dev上繼續(xù)修改,然后久脯,時(shí)不時(shí)地把dev分支push到遠(yuǎn)程:

git commit -m "add /usr/bin/env"

[dev 291bea8] add /usr/bin/env

1 file changed, 1 insertion(+)

git push origin dev

Counting objects: 5, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 349 bytes, done.

Total 3 (delta 0), reused 0 (delta 0)

To git@github.com:suny/learngit.git fc38031..291bea8 dev -> dev

你的小伙伴已經(jīng)向origin/dev分支推送了他的提交纳胧,而碰巧你也對(duì)同樣的文件作了修改,并試圖推送:

$git add hello.py
$ git commit -m "add coding: utf-8"
[dev bd6ae48] add coding: utf-8
1 file changed, 1 insertion(+)
$ git push origin dev
To git@github.com:suny/learngit.git
! [rejected] dev -> dev (non-fast-forward)
error: failed to push some refs to 'git@github.com:suny/learngit.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

推送失敗帘撰,因?yàn)槟愕男』锇榈淖钚绿峤缓湍阍噲D推送的提交有沖突跑慕,解決辦法也很簡單,Git已經(jīng)提示我們摧找,先用git pull把最新的提交從origin/dev抓下來核行,然后,在本地合并蹬耘,解決沖突芝雪,再推送:

git pull

remote: Counting objects: 5, done.

remote: Compressing objects: 100% (2/2), done.

remote: Total 3 (delta 0), reused 3 (delta 0)

Unpacking objects: 100% (3/3), done.

From github.com:suny/learngit

fc38031..291bea8 dev -> origin/dev

There is no tracking information for the current branch.

Please specify which branch you want to merge with.

See git-pull(1) for details

git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream dev origin/<branch>

git pull也失敗了,原因是沒有指定本地dev分支與遠(yuǎn)程origin/dev分支的鏈接综苔,根據(jù)提示惩系,設(shè)置dev和origin/dev的鏈接:

git branch --set-upstream dev origin/dev

Branch dev set up to track remote branch dev from origin.

再pull:

$
git pull

Auto-merging hello.py

CONFLICT (content): Merge conflict in hello.py

Automatic merge failed; fix conflicts and then commit the result.

這回git pull成功,但是合并有沖突如筛,需要手動(dòng)解決堡牡,解決的方法和分支管理中的解決沖突完全一樣。解決后杨刨,提交悴侵,再push:

$ git commit -m "merge & fix hello.py"
[dev adca45d] merge & fix hello.py
$ git push origin dev
Counting objects: 10, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (9/9), 747 bytes, done.
Total 6 (delta 0), reused 0 (delta 0)
To git@github.com:suny/learngit.git
   291bea8..adca45d  dev -> dev
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拭嫁,隨后出現(xiàn)的幾起案子可免,更是在濱河造成了極大的恐慌,老刑警劉巖做粤,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浇借,死亡現(xiàn)場離奇詭異,居然都是意外死亡怕品,警方通過查閱死者的電腦和手機(jī)妇垢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肉康,“玉大人闯估,你說我怎么就攤上這事『鸷停” “怎么了涨薪?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長炫乓。 經(jīng)常有香客問我刚夺,道長,這世上最難降的妖魔是什么末捣? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任侠姑,我火速辦了婚禮,結(jié)果婚禮上箩做,老公的妹妹穿的比我還像新娘莽红。我一直安慰自己,他們只是感情好邦邦,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布安吁。 她就那樣靜靜地躺著,像睡著了一般圃酵。 火紅的嫁衣襯著肌膚如雪柳畔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天郭赐,我揣著相機(jī)與錄音薪韩,去河邊找鬼。 笑死捌锭,一個(gè)胖子當(dāng)著我的面吹牛俘陷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播观谦,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼拉盾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了豁状?” 一聲冷哼從身側(cè)響起捉偏,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤倒得,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后夭禽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霞掺,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年讹躯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了菩彬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡潮梯,死狀恐怖骗灶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情秉馏,我是刑警寧澤耙旦,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站沃饶,受9級(jí)特大地震影響母廷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜糊肤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一琴昆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧馆揉,春花似錦业舍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至噩茄,卻和暖如春下面,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绩聘。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工沥割, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人凿菩。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓机杜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親衅谷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子椒拗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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

  • 首先確定電腦安裝了git 輸入git 會(huì)產(chǎn)生提示: 如果沒有安裝,那么就網(wǎng)上搜索下載完成安裝. 可以使用命令行安裝...
    彗星來的那一夜閱讀 838評(píng)論 0 0
  • 2016.12.4 雖然14年開發(fā)第一個(gè)項(xiàng)目時(shí)就已經(jīng)接觸了git,當(dāng)時(shí)xcode已經(jīng)開始支持git,在github...
    張小明閱讀 396評(píng)論 1 0
  • 本文作者陳云峰蚀苛,轉(zhuǎn)載請(qǐng)注明在验。 這篇文章記錄個(gè)人常用的一些命令,和記不住的一些命令枉阵,轉(zhuǎn)載了并不斷更新译红。 Git官網(wǎng) ...
    陳云峰閱讀 2,805評(píng)論 0 24
  • 我后知后覺,從前天晚上才開始看《中國式關(guān)系》兴溜,看了6集,特別想聊聊電視劇當(dāng)中馬國梁所生活在的那種大院關(guān)系耻陕。 每一次...
    暖小暖小暖閱讀 286評(píng)論 0 0
  • 珠江潮平閱讀 246評(píng)論 4 4