git入門(mén)簡(jiǎn)明教程

我們做畢業(yè)設(shè)計(jì)一般包含代碼部分和論文笛钝,為了保存論文每次更改記錄,會(huì)復(fù)制重命名聪富,對(duì)于代碼部分一般也會(huì)復(fù)制文件夾記錄版本。在企業(yè)當(dāng)中是一個(gè)團(tuán)隊(duì)在開(kāi)發(fā)著蟹,顯然需要版本管理墩蔓,能夠查看每次提交的代碼比上個(gè)版本的變化梢莽,如果版本存在問(wèn)題,可以回滾到老版本等等奸披。此處介紹企業(yè)中都在用的git昏名,工作流程:
本地工作區(qū)【代碼目錄】-》到暫存區(qū)【加入git文件跟蹤,文件索引】-》到本地倉(cāng)庫(kù)-》遠(yuǎn)程倉(cāng)庫(kù)【大家都可以訪(fǎng)問(wèn)的服務(wù)器,例如github】

一阵面、git 下載:https://git-scm.com/downloads
二轻局、git本地倉(cāng)庫(kù)創(chuàng)建,創(chuàng)建文件样刷,添加到暫存區(qū)仑扑,提交到本地倉(cāng)庫(kù)

cd /Users/free/learngit //到工作目錄

git init //初始化版本庫(kù)

echo "第一個(gè)版本代碼xxxx" >> test.txt //追加這段文字到test.txt文件

git status //查看工作區(qū)狀態(tài)

以下返回內(nèi)容:

On branch master
No commits yet
Untracked files:
  (use "git add <file>..." to include in what will be committed)
    test.txt
nothing added to commit but untracked files present (use "git add" to track)·

git add test.txt //將test.txt添加到暫存區(qū)

//提交到本地倉(cāng)庫(kù) "第一個(gè)版本" 為提交備注,方便日后查看這次提交代碼的主要功能

git commit -m "第一個(gè)版本"

三置鼻、將本地倉(cāng)庫(kù)推送到github或者其他遠(yuǎn)程倉(cāng)庫(kù)中镇饮,與其他人共同開(kāi)發(fā)

//接下來(lái)設(shè)置賬戶(hù),跟github用一個(gè)賬戶(hù)箕母,并推送本地倉(cāng)庫(kù)到github這個(gè)遠(yuǎn)程倉(cāng)庫(kù)上

//--global 如果加這個(gè)就會(huì)設(shè)置全局储藐,不加則只設(shè)置當(dāng)前倉(cāng)庫(kù)所用賬戶(hù)

cd .git //要進(jìn)入項(xiàng)目目錄下的.git文件夾 進(jìn)行賬戶(hù)設(shè)置

git config [--global] user.name "onerole1024"

git config [--global] user.email "onerole@126.com"

git config --list //查看配置

cat config //查看配置

git remote add origin https://github.com/onerole1024/learngit.git //本地倉(cāng)庫(kù)關(guān)聯(lián)到遠(yuǎn)程倉(cāng)庫(kù),遠(yuǎn)程倉(cāng)庫(kù)的名稱(chēng)一般默認(rèn)為origin嘶是,也可以設(shè)置為其他名稱(chēng)

git push -u origin master //將本地倉(cāng)庫(kù)master分支推送到origin主機(jī)钙勃,指定origin為默認(rèn)主機(jī),以后可以不加任何參數(shù)使用git push

cd ..//從.git 目錄到上層目錄

echo "第二個(gè)版本">>test.txt //追加這句話(huà)到test.txt文件

git add test.txt //將test.txt添加到暫存區(qū)

git commit -m "第二個(gè)版本" //提交到本地倉(cāng)庫(kù)

git push //將本地倉(cāng)庫(kù)推送到遠(yuǎn)程github聂喇,此時(shí)查看github就會(huì)看到提交記錄

git pull //拉取遠(yuǎn)程服務(wù)器上最新代碼

四辖源、將變動(dòng)提交到暫存區(qū),還未提交到本地倉(cāng)庫(kù)授帕,但變動(dòng)不想要了同木,需要丟去

echo "第二個(gè)版本的細(xì)微改動(dòng)" >>test.txt //對(duì)代碼進(jìn)行修改

git add test.txt //添加到暫存區(qū)

git reset HEAD test.txt //將本地倉(cāng)庫(kù)文件狀態(tài)覆蓋暫存區(qū)

git checkout -- test.txt //將工作區(qū)變?yōu)闀捍鎱^(qū)的狀態(tài)

五、將變動(dòng)已經(jīng)提交到本地倉(cāng)庫(kù)或者遠(yuǎn)程倉(cāng)庫(kù),但變動(dòng)不想要了深浮,需要回滾到某一個(gè)版本

echo "第二個(gè)版本增加擴(kuò)展功能" >>test.txt //對(duì)代碼進(jìn)行修改

git add test.txt //添加到暫存區(qū)

git commit -m "第二個(gè)版本擴(kuò)展功能" //提交到本地倉(cāng)庫(kù)

git push //推送到遠(yuǎn)程倉(cāng)庫(kù)

git log //查看提交記錄旭寿,以下是提交記錄

commit 049ffa85228bdc65ec9c3061c1438e36478ae007 (HEAD -> master)
Author: onerole1024 <onerole@126.com>
Date:   Sat Mar 9 21:21:47 2019 +0800
    第二個(gè)版本擴(kuò)展功能

commit 52c576e19eef9bcd7e3354598d12d242419621c1 (origin/master)
Author: onerole1024 <onerole@126.com>
Date:   Sat Mar 9 20:28:14 2019 +0800
    第二次提交

commit e4338a16c7d1e16be2ea003fe7d2f875e687c64f
Author: onerole1024 <onerole@126.com>
Date:   Sat Mar 9 20:24:08 2019 +0800
    第一次提交

//將倉(cāng)庫(kù)和暫存區(qū)都回滾到上次提交的版本,復(fù)制上次提交的版本號(hào)洲尊,執(zhí)行回滾

git reset --hard 52c576e19eef9bcd7e3354598d12d242419621c1
//輸出:

HEAD is now at 52c576e 第二次提交

git push origin --force //強(qiáng)制推送到遠(yuǎn)程倉(cāng)庫(kù)主分支

//git reset --hard 之后,git log就看不到放棄的提交了奈偏,git reflog則可以看到被刪除的commit 坞嘀,可以后悔,執(zhí)行 git reset --hard xxx 恢復(fù)到某刪除的版本惊来,已經(jīng)提交到遠(yuǎn)程服務(wù)器的版本要回滾到之前某版本比較危險(xiǎn)丽涩,本地執(zhí)行了git reset --hard 之后版本落后于遠(yuǎn)程倉(cāng)庫(kù),需要git push origin --force 強(qiáng)制push

六、項(xiàng)目增加了一個(gè)功能矢渊,也提交到了本地倉(cāng)庫(kù)继准,但完全不需要了,需要?jiǎng)h除這個(gè)功能

echo "增加人臉識(shí)別功能" >> face.txt

git add face.txt

git commit -m "人臉識(shí)別"

git rm face.txt //刪除變動(dòng)

git status //查看狀態(tài)矮男,需要將刪除提交到本地倉(cāng)庫(kù)

git commit -m "丟棄人臉識(shí)別功能" //將刪除提交到本地倉(cāng)庫(kù)

七移必、項(xiàng)目中暫存區(qū)的變動(dòng)不需要了,將本地倉(cāng)庫(kù)文件狀態(tài)覆蓋掉暫存區(qū)和工作區(qū)【與四毡鉴、相同】

echo "發(fā)送語(yǔ)音" >>yy.txt

git add yy.txt

git commit -m "語(yǔ)音功能"

echo "語(yǔ)音識(shí)別" >>yy.txt

git add yy.txt

git checkout HEAD yy.txt //將版本庫(kù)的文件覆蓋掉暫存區(qū)和工作區(qū)

八崔泵、項(xiàng)目已經(jīng)提交到遠(yuǎn)程服務(wù)器,但是該功能不需要了猪瞬,將遠(yuǎn)程本地回滾到上個(gè)版本【與五憎瘸、的區(qū)別是回滾到某一個(gè)版本,只是命令差異】

echo "增加表情功能" >> bq.txt

git add bq.txt

git commit -m "表情功能"

git push

git revert HEAD //回滾到上個(gè)版本 與reset --hard 的區(qū)別就是會(huì)生成一次提交

git commit -m "不需要發(fā)送表情"

git push

九撑螺、總結(jié)工作區(qū)含思、暫存區(qū)、本地倉(cāng)庫(kù)工作流甘晤、遠(yuǎn)程倉(cāng)庫(kù)

工作區(qū)改動(dòng)通過(guò)add提交到暫存區(qū)含潘,通過(guò)commit提交到本地倉(cāng)庫(kù),push推送到遠(yuǎn)程倉(cāng)庫(kù)线婚。reset HEAD 會(huì)將本地倉(cāng)庫(kù)某文件最新版本覆蓋掉暫存區(qū)文件遏弱,checkout --
會(huì)將暫存區(qū)文件覆蓋掉工作區(qū)文件。checkout HEAD 會(huì)將本地倉(cāng)庫(kù)某文件
最新版本覆蓋掉暫存區(qū)和工作區(qū)文件塞弊。如果需要將本地倉(cāng)庫(kù)回滾到之前某個(gè)版本
則git reset --hard 版本號(hào)漱逸,這樣本地倉(cāng)庫(kù)和暫存區(qū)指針都會(huì)指向這個(gè)版本,
這個(gè)版本號(hào)的文件會(huì)覆蓋掉工作區(qū)文件游沿。
git push origin master -f ,-f 參數(shù)是強(qiáng)制提交饰抒,因?yàn)閞eset之后本地庫(kù)落后于
遠(yuǎn)程庫(kù)版本,因此需要強(qiáng)制提交诀黍。
git revert HEAD 和 reset 的區(qū)別是袋坑,前者會(huì)保留要放棄的提交記錄。
暫存區(qū)index 和 本地倉(cāng)庫(kù)HEAD 都是指針形式指向objects文件hash眯勾。


工作區(qū)-暫存區(qū)-本地倉(cāng)庫(kù).jpg
十枣宫、標(biāo)簽管理,每發(fā)個(gè)版本打一個(gè)標(biāo)簽,便于管理吃环,每一個(gè)標(biāo)簽就像一個(gè)里程碑式發(fā)布

git tag v2.0 //打一個(gè)標(biāo)簽 v2.0

git tag //查看所有打的標(biāo)簽

git push origin v2.0 //將標(biāo)簽推送到遠(yuǎn)程倉(cāng)庫(kù)【遠(yuǎn)程倉(cāng)庫(kù)默認(rèn)命名origin】
//以上操作會(huì)將遠(yuǎn)程倉(cāng)庫(kù)當(dāng)前的代碼打一個(gè)標(biāo)簽也颤,該標(biāo)簽如同當(dāng)前代碼內(nèi)容快照

echo "增加方言識(shí)別" >> yy.txt

git add yy.txt

git commit -m "方言"

git push origin v2.1

echo "增加泰語(yǔ)" >> yy.txt

git add yy.txt

git commit -m "泰語(yǔ)"

git tag v2.2

git push origin v2.2

git tag -d v2.2 //刪除本地倉(cāng)庫(kù)標(biāo)簽

git push origin :refs/tags/v2.2 //刪除遠(yuǎn)程該標(biāo)簽 git push origin :refs/tags/標(biāo)簽名
//以上命令把修改代碼本地打標(biāo)簽并推送到遠(yuǎn)程相應(yīng)的標(biāo)簽,并未到遠(yuǎn)程主分支

git push //將變動(dòng)推送到主分支

//如果某一個(gè)發(fā)布的標(biāo)簽出現(xiàn)bug郁轻,可以查看該標(biāo)簽對(duì)應(yīng)的commit提交號(hào)翅娶,將
本地倉(cāng)庫(kù)版本回滾到該版本,然后拉取分支,將本地倉(cāng)庫(kù)版本再恢復(fù)到最新版本故觅,
在分支修復(fù)bug后厂庇,本地打標(biāo)簽并push到遠(yuǎn)程該標(biāo)簽渠啊,合并代碼到本地倉(cāng)庫(kù)主分支再push

十一输吏、 主分支還在開(kāi)發(fā),當(dāng)需要開(kāi)發(fā)一個(gè)功能替蛉,與主分支不能同時(shí)發(fā)版等贯溅,可以創(chuàng)建分支

echo "增加人機(jī)對(duì)話(huà)功能,中文">> speak.txt

git add * //當(dāng)前修改全部加入暫存區(qū)

git commit -m "人機(jī)對(duì)話(huà)-中文"

git push

git branch feature_en //打一個(gè)分支名為 feature_en 用做開(kāi)發(fā)人機(jī)回話(huà)-英語(yǔ)

git branch //查看當(dāng)前所有分支 簽名帶*號(hào)的為當(dāng)前所在分支

git checkout feature_en //切換到 feature_en 這個(gè)分支

echo "增加人機(jī)對(duì)話(huà)功能躲查,英文">> speak.txt //在分支上開(kāi)發(fā)新功能

git add speak.txt

git commit -m "人機(jī)對(duì)話(huà)-英語(yǔ)"

git push --set-upstream origin feature_en //在遠(yuǎn)程倉(cāng)庫(kù)github上創(chuàng)建分支它浅,并將修改push到遠(yuǎn)程分支

echo "增加人機(jī)對(duì)話(huà)功能,修復(fù)英文bug">> speak.txt

git add speak.txt

git commit -m "修復(fù)英文bug"

git push

git checkout master //切換到主分支

echo "人機(jī)對(duì)話(huà)智能性增強(qiáng)">>speak.txt //主分支開(kāi)發(fā)了新內(nèi)容

git add speak.txt

git commit -m "智能增強(qiáng)"

git push //推送到遠(yuǎn)程倉(cāng)庫(kù)

git tag v2.2 //創(chuàng)建本地倉(cāng)庫(kù)標(biāo)簽

git push origin v2.2 //推送本地標(biāo)簽內(nèi)容到遠(yuǎn)程倉(cāng)庫(kù)镣煮,并建立遠(yuǎn)程倉(cāng)庫(kù)標(biāo)簽

git merge feature_en //將分支內(nèi)容合并到主分支上姐霍,由于同時(shí)都在開(kāi)發(fā),產(chǎn)生沖突典唇,需要解決

cat speak.txt //以下為輸出內(nèi)容

增加人機(jī)對(duì)話(huà)功能镊折,中文
<<<<<<< HEAD
人機(jī)對(duì)話(huà)智能性增強(qiáng)
=======
增加人機(jī)對(duì)話(huà)功能,英文
增加人機(jī)對(duì)話(huà)功能介衔,修復(fù)英文bug
>>>>>>> feature_en

git add speak.txt //解決沖突后恨胚,添加到暫存區(qū)

git commit -m "合并分支上英語(yǔ)對(duì)話(huà)功能"

git push

十二、 創(chuàng)建和刪除遠(yuǎn)程分支

git branch feature_ak //本地倉(cāng)庫(kù)創(chuàng)建 feature_ak 分支

git checkout feature_ak //切換到本地倉(cāng)庫(kù) feature_ak 分支

git push --set-upstream origin feature_ak //push推送創(chuàng)建遠(yuǎn)程分支

git checkout master //切換到本地倉(cāng)庫(kù) master 分支,再去刪除 feature_ak 分支

git branch -d feature_ak //刪除本地倉(cāng)庫(kù) feature_ak 分支

git push origin --delete feature_ak //刪除遠(yuǎn)程分支

十三炎咖、 企業(yè)級(jí)應(yīng)用gitflow赃泡,項(xiàng)目開(kāi)發(fā)、發(fā)布乘盼、bug修復(fù)的分支規(guī)劃

master分支和dev開(kāi)發(fā)分支都會(huì)存在開(kāi)發(fā)歷史記錄升熊,程序員平日根據(jù)項(xiàng)目功能模塊從dev開(kāi)發(fā)分支打出feature_x功能分支,開(kāi)發(fā)的功能完成之后會(huì)合并到dev開(kāi)發(fā)分支上绸栅,并刪除該功能分支级野,當(dāng)dev開(kāi)發(fā)分支收集完這次迭代功能,需要發(fā)布版本時(shí)阴幌,會(huì)創(chuàng)建release分支勺阐,部署release分支代碼到測(cè)試環(huán)境供測(cè)試人員進(jìn)行測(cè)試,修復(fù)bug會(huì)提交到release分支上矛双,測(cè)試通過(guò)后會(huì)將release分支合并到主分支并打一個(gè)標(biāo)簽渊抽,release分支合并到開(kāi)發(fā)分支,并將release分支刪除议忽。生產(chǎn)環(huán)境運(yùn)行的是master分支打的發(fā)布標(biāo)簽版本號(hào)懒闷,生產(chǎn)環(huán)境發(fā)現(xiàn)bug,會(huì)從master主分支打出一個(gè)hotfix分支,做bug修復(fù)愤估,修復(fù)完成會(huì)合并到master主分支和dev開(kāi)發(fā)分支帮辟,刪除hotfix分支。也就是說(shuō)dev開(kāi)發(fā)分支就第一次從master主分支上打出來(lái)之后就獨(dú)立往前推進(jìn)玩焰,當(dāng)收集完feature會(huì)打出release分支由驹,release分支測(cè)試完畢,合并到master主分支并打出版本號(hào)標(biāo)簽昔园,記錄發(fā)布版本號(hào)蔓榄。合并到dev開(kāi)發(fā)分支,使得開(kāi)發(fā)分支保持最新代碼狀態(tài)默刚。此時(shí)release分支使命就結(jié)束了甥郑。


gitflow.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市荤西,隨后出現(xiàn)的幾起案子澜搅,更是在濱河造成了極大的恐慌,老刑警劉巖邪锌,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勉躺,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡秃流,警方通過(guò)查閱死者的電腦和手機(jī)赂蕴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)舶胀,“玉大人概说,你說(shuō)我怎么就攤上這事∠ィ” “怎么了糖赔?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)轩端。 經(jīng)常有香客問(wèn)我放典,道長(zhǎng),這世上最難降的妖魔是什么基茵? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任奋构,我火速辦了婚禮,結(jié)果婚禮上拱层,老公的妹妹穿的比我還像新娘弥臼。我一直安慰自己,他們只是感情好根灯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布径缅。 她就那樣靜靜地躺著掺栅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纳猪。 梳的紋絲不亂的頭發(fā)上氧卧,一...
    開(kāi)封第一講書(shū)人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音氏堤,去河邊找鬼沙绝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛丽猬,可吹牛的內(nèi)容都是我干的宿饱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼脚祟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了强饮?” 一聲冷哼從身側(cè)響起由桌,我...
    開(kāi)封第一講書(shū)人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎邮丰,沒(méi)想到半個(gè)月后行您,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡剪廉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年娃循,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斗蒋。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捌斧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捞蚂,到底是詐尸還是另有隱情,我是刑警寧澤跷究,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站俊马,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏柴我。R本人自食惡果不足惜解寝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屯换。 院中可真熱鬧编丘,春花似錦与学、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至抑片,卻和暖如春卵佛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背敞斋。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工截汪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人植捎。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓衙解,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親焰枢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚓峦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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