拾人牙慧系列--Git再學習

前言

本系列文章催跪,將在各路大神文章的基礎(chǔ)上,總結(jié)提煉出自己的感悟夷野,力求將大神的觀點總結(jié)的更加凝練懊蒸,希望站在巨人的肩膀上,能看得更遠

請務(wù)必先在無實際作用的測試工程中練習Git命令
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ——《魯迅沒說過的話精選集》

在還沒有很熟悉Git命令之前悯搔,請務(wù)必先確認輸入的指令是否是你想要的效果骑丸,如果不能確定,還是先使用可視化工具
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ——《跑路程序員告誡你的二三事》


本篇引用文章

廖雪峰大神的專題文章--史上最淺顯易懂的Git教程!
另外通危,參考了這里:
易百教程--Git教程


內(nèi)容提要

作為一名程序員铸豁,Git/SVN是我們每天都要打交道的東西(本篇不討論SVN),然而菊碟,我們真的會用Git嗎节芥?你是不是也和我一樣,只會git clone git pull git commit git push呢逆害?如果你也是头镊,請跟隨我,在廖雪峰大神的帶領(lǐng)下忍燥,一起重新學習一下Git的使用吧

當然有人會說拧晕,這都9102年了,GitHub for Desktop梅垄、Source Tree厂捞、TortoiseGit、SmartGit了解一哈队丝,確實靡馁,各種工具為我們屏蔽了復(fù)雜的命令,提供了方便机久。但是臭墨,如果你基本不怎么了解Git有什么命令,以及常用命令的作用膘盖,那么胧弛,在你遇到一些突發(fā)情況時,你往往無法處理(也是我的親身體會)侠畔,所以我認為结缚,雖然大部分時候我們還是會用工具去做事,但是還是有必要學習一下基本的命令


Git簡介+安裝

Git簡介----不贅述软棺,看大神的文章吧

Git安裝----不贅述红竭,看大神的文章吧


創(chuàng)建Git工程

初始化本地目錄
git init

//正常情況下,輸出如:
//Initialized empty Git repository in D:/work/code/gitLearning/project1/.git/
//就是成功啦
新建遠程倉庫
  • 1.打開Github喘落,注冊并登陸茵宪,這個就不詳細說了
  • 2.
  • 3.
  • 4.

    創(chuàng)建好就長這樣,有三個指引瘦棋,分別對應(yīng)初始化一個本地庫并關(guān)聯(lián)到遠程庫 關(guān)聯(lián)本地庫到遠程庫 用其他遠程庫來初始化當前庫
關(guān)聯(lián)倉庫
關(guān)聯(lián)本地庫到遠程庫
git remote add origin git@github.com:NotSeriousCoder/GitLearning.git
git push -u origin master

首次push就報錯

首次提交稀火,如上圖報錯,后來嘗試了兽狭,在本地工程目錄新建一個文件aaa.txt(當然一般是新建一個README.md文件)憾股,然后提交如下:

git add
git commit -m "first commit"
git remote add origin git@github.com:NotSeriousCoder/GitLearning.git
git push -u origin master
//這里如果你的key設(shè)置了密碼鹿蜀,需要輸入密碼
//Enter passphrase for key '/c/Users/Bingor/.ssh/note':***
用其他遠程庫來初始化當前庫
  • 1.
  • 2.
  • 3.
    導入中
  • 4.
    導入完成
從遠程倉庫克隆

如果本地沒有倉庫,只有遠程倉庫服球,也可以直接從遠程克隆下來茴恰,如下:

git clone git@github.com:NotSeriousCoder/GitLearning.git

多人協(xié)作

提交代碼
//如果有新的文件/文件有變動
//git add 目的是讓Git追蹤文件變化,將文件的變化放入暫存區(qū)
git add xxx.xxx
//如果有多個文件變化斩熊,可使用 -A 來追蹤所有變動
git add -A

//如果不清楚有哪些文件有變化往枣,可以使用git status,會列出上一個Commit之后的所有變動
git status
//如果嫌輸出的信息過于繁瑣粉渠,可使用 -s 來簡化輸出
git status -s

//提交
git commit -m "commit說明"
推送代碼到遠端

commit好代碼分冈,我們通常需要將其推送到遠端倉庫(至少每天下班得推一次,不然太久不推霸株,比較差異你就得瘋)
然而你不能直接把代碼推到遠端雕沉,因為你的小伙伴大概率也會去修改提交代碼
所以在推送之前,你需要將可能的遠端變更先拉取下來

//遠程主機名一般默認是origin去件,遠程分支名則是你需要拉取的遠程分支
//這句命令會執(zhí)行兩個操作坡椒,首先拉取遠端文件,然后嘗試跟本地文件合并
git pull <遠程主機名> <遠程分支名>

如果成功尤溜,長這樣:


pull成功倔叼,無沖突

如果失敗,長這樣:


代碼Merge失敗

你需要解決沖突宫莱,然后提交丈攒,再推送
沖突長這樣

你需要和一起開發(fā)的小伙伴確認應(yīng)該保留哪部分代碼,然后刪除與之沖突的
刪除完畢

接下來把Merge add并提交授霸,然后就可以push了(當然巡验,理論上來說,在你解決沖突的期間碘耳,會不會遠端倉庫的文件又更新了呢深碱?有可能的吧?所以也許需要再pull一次藏畅,看你具體需要了)

git push <遠程主機名> <本地分支名>:<遠程分支名>
push完成

回溯歷史

查看當前工作區(qū)與上次commit/add的差異
//會詳細列出當前工作區(qū)未暫存的修改內(nèi)容
git diff
//會詳細列出當前工作區(qū)中指定文件未暫存的修改內(nèi)容
git diff 文件名
//會詳細列出當前工作區(qū)中指定文件未暫存的修改內(nèi)容與某個指定版本的不同
git diff 版本號 文件名

git diff 執(zhí)行結(jié)果

增加的行,會以+xxx的形式標注
刪去的行功咒,會以-xxx的形式標注
修改的行愉阎,會以-原來的內(nèi)容 +現(xiàn)在的內(nèi)容標注

//上文提到過,可以總覽有哪些文件發(fā)生了修改
git status
//嫌輸出的信息太多力奋,也可以簡略輸出
git status -s

git status -s 的執(zhí)行結(jié)果

修改過的文件榜旦,會以M作為前綴
刪除的文件,會以D作為前綴
新增的文件景殷,會以?作為前綴

還沒有commit溅呢,修改的內(nèi)容不想要了澡屡,想回退到上一次add/commit的狀態(tài)
  • 如果已經(jīng)add
//必須先reset,否則無法checkout
git reset
git checkout xxx
撤銷修改
  • 如果還沒add
//沒有add的情況下咐旧,不需要reset
git checkout xxx
還沒add驶鹉,直接checkout 即可
已經(jīng)commit,修改的內(nèi)容不想要了铣墨,想回退到上一次add/commit的狀態(tài)
//回退到上一個版本
git reset hard HEAD^
//回退到上N個版本
git reset hard HEAD~n
//回退到上指定版本
git reset --hard commit_id

//可以結(jié)合log命令室埋,查看以往的提交,n表示查看最近n次提交記錄伊约,不設(shè)置的話將展示所有歷史記錄
git log -n

分支管理

查看所有分支
git branch -a
新建一個分支
//你可以選擇
git checkout -b xxx
//或者
git branch xxx

區(qū)別在于姚淆,前者只創(chuàng)建分支,后者還會幫你切換過去

創(chuàng)建新分支
在某個特定commit的基礎(chǔ)上新建一個分支

會有這么一種場景屡律,我想新建一個分支腌逢,但是當前版本包含了一些新分支不需要的變更,而前n個版本有適合用于新建分支的commit超埋,那么搏讶,我們可以在那個commit的基礎(chǔ)上去新建分支。例如:


舉個栗子

于是乎纳本,我通過翻找log窍蓝,找到一個合適的版本,id為:ae081072xxx(不需要完整的id繁成,有前幾位即可吓笙,當然也不能太短)

//你可以選擇
git checkout -b xxx commitId
//或者
git branch xxx commitId
//commitId即代表你指定的版本對應(yīng)的commit
執(zhí)行結(jié)果

再看看項目目錄


不希望保留的文件已經(jīng)消失
切換分支
git checkout 分支名稱

切換分支前,需要提交當前工作區(qū)的變更巾腕,否則將會報錯


先提交面睛,后切換
刪除分支

刪除需謹慎
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ——《不要問我為什么說這個話》

git branch -d 分支名稱
合并分支
//將指定分支合并到當前分支來
git merge 分支名

如果像我這樣遇到?jīng)_突

  • 1.可以手動解決(前文有提及)
  • 2.如果是某些文件單純的只使用某個分支的就行(比如A文件,想完全采用dev1分支的版本)尊搬,可以使用命令
//ours表示采用當前分支版本
git checkout --ours 文件名
//theirs表示采用合并過來的分支版本
git checkout --theirs 文件名

需要注意叁鉴,如果用的是rebase,那么ours跟theirs的意思相反(rebase的用法還沒吃透佛寿,這里不演示)

最后幌墓,提交即可


merge完記得提交哦

其他

//清空屏幕
reset

總結(jié)

本篇結(jié)合git的常用場景,介紹了git的部分命令冀泻,git的功能絕不僅限于此常侣,更多的內(nèi)容有待我們?nèi)ネ诰颍壳拔乙仓皇怯玫搅诉@些弹渔,以后隨著遇到的場景和問題的增加胳施,我會陸續(xù)將更多的內(nèi)容分享上來


未完待續(xù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市肢专,隨后出現(xiàn)的幾起案子舞肆,更是在濱河造成了極大的恐慌焦辅,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椿胯,死亡現(xiàn)場離奇詭異筷登,居然都是意外死亡,警方通過查閱死者的電腦和手機压状,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門仆抵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人种冬,你說我怎么就攤上這事镣丑。” “怎么了娱两?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵莺匠,是天一觀的道長。 經(jīng)常有香客問我十兢,道長趣竣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任旱物,我火速辦了婚禮遥缕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宵呛。我一直安慰自己单匣,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布宝穗。 她就那樣靜靜地躺著户秤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逮矛。 梳的紋絲不亂的頭發(fā)上鸡号,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音须鼎,去河邊找鬼鲸伴。 笑死,一個胖子當著我的面吹牛晋控,可吹牛的內(nèi)容都是我干的挑围。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼糖荒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了模捂?” 一聲冷哼從身側(cè)響起捶朵,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蜘矢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后综看,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體品腹,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年红碑,在試婚紗的時候發(fā)現(xiàn)自己被綠了舞吭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡析珊,死狀恐怖羡鸥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情忠寻,我是刑警寧澤惧浴,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站奕剃,受9級特大地震影響衷旅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纵朋,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一柿顶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧操软,春花似錦嘁锯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至胆建,卻和暖如春烤低,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背笆载。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工扑馁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人凉驻。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓腻要,卻偏偏與公主長得像,于是被迫代替她去往敵國和親涝登。 傳聞我的和親對象是個殘疾皇子雄家,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354