Git的簡(jiǎn)單使用

前提:

SVN屬于集中式管理:需要依賴網(wǎng)絡(luò)以及“中央管理庫(kù)”
Git屬于分布式管理:不需要網(wǎng)絡(luò),任何人本地都是一個(gè)完整的代碼庫(kù)芒率。

注意事項(xiàng):

1琉挖、不管是刪除還是添加店雅,都要先將改變的代碼add,然后在commit
2、發(fā)起pull request的時(shí)候思杯, 是將你fork的項(xiàng)目clone到本地胜蛉, 然后進(jìn)行修改,修改完了再提交代碼到你的工作區(qū)色乾,因?yàn)閯e人的你也提交不上去 O(∩_∩)O哈哈~ 誊册。然后在你fork的項(xiàng)目中發(fā)起pull request

常用命令:

pwd: 查看目錄地址
ls:顯示所有子文件夾
cd:切換文件夾進(jìn)入暖璧; cd.. 后退 cd~ 直接退到根目錄
cat <file> 查看文件內(nèi)容
open file 打開文件
終端命令:
Ctrl + A 將光標(biāo)跳到行頭
Ctrl + E 將光標(biāo)跳到行尾
Ctrl + L 清屏
Ctrl + R 搜索以前執(zhí)行過的命令
Ctrl + C 終止正在運(yùn)行的程序
Ctrl + D 退出 Terminal(這里建議使用 Command + W 來完成)

Git的使用案怯,本地倉(cāng)庫(kù) 大體流程

1.創(chuàng)建一個(gè)Git倉(cāng)庫(kù) : git init

2.在創(chuàng)建的目錄下,隨便添加文件澎办。然后git add <file> 如果有多個(gè)文件嘲碱,可以多次添加 金砍,也可以添加一個(gè)文件夾的,添加文件夾一定要是完整路徑,注意后面那個(gè)路徑"/"符號(hào)麦锯。只需寫出前幾個(gè)字母恕稠,tab按鍵會(huì)自動(dòng)補(bǔ)全,git提示信息那里也有完整的要添加的文件离咐。
git add . // 注意 . 是增加所有的*

3.將你添加的文件提交到倉(cāng)庫(kù)谱俭。 git commit (有一個(gè)問題:每次git commit之后,都要彈出確認(rèn)提交的文件宵蛀,要手動(dòng)選擇昆著,刪除前面的#號(hào)。假如新加的文件很多术陶,一個(gè)個(gè)刪除#號(hào)好麻煩啊凑懂,有沒有別的方法?還是我操作的是錯(cuò)誤的梧宫? 求指導(dǎo))————有的時(shí)候會(huì)彈出接谨,有時(shí)候又不用彈出,不知道什么原因塘匣。

git commit -m "這次提交的備注" 強(qiáng)烈建議每次commit都要寫上備注脓豪,方便后續(xù)查看。 git commit 的時(shí)候不需要指出對(duì)應(yīng)的文件忌卤。

4.git status 查看當(dāng)前的狀態(tài)扫夜。 可以看到內(nèi)容的變化,需要提交修改的內(nèi)容驰徊。
5.git diff 可以比較前后兩次修改之間的變化笤闯。

6.查看版本提交信息
git log 可以查看提交的版本信息和順序號(hào) git log --pretty=oneline 查看信息簡(jiǎn)單明了。

7.版本回退
git reset --hard HEAD^ 后面這個(gè)^數(shù)量棍厂,代表返回前面第幾次提交颗味,太多了的時(shí)候,可以跟數(shù)字牺弹。git reset --hard HEAD^^^ , git reset --hard HEAD^66
不能確定要返回的位置是第幾次提交位置浦马,可以通過log查看對(duì)應(yīng)提交的版本序號(hào),用 git reset --hard 78er7387 返回到對(duì)應(yīng)提交位置 例驹。這個(gè)是版本號(hào)捐韩,沒有必要寫全,只寫前幾位就好鹃锈,git會(huì)自動(dòng)查找的荤胁。
版本回退后悔了,你可以使用git reflog查看命令歷史屎债,以便確定要回到未來的哪個(gè)版本仅政。

撤銷修改:
沒有add之前垢油,用git checkout --file。 一旦add到了暫存區(qū)圆丹,就要用git reset HEAD file , 然后再git checkout --file滩愁。

8.本地關(guān)聯(lián)遠(yuǎn)程的倉(cāng)庫(kù) git remote add origin <遠(yuǎn)程倉(cāng)庫(kù)地址>
關(guān)聯(lián)之后,本地有修改就可以直接提交代碼了辫封。 git push origin master
第一次提交多添加一個(gè)參數(shù)硝枉,將本地與遠(yuǎn)程的分支關(guān)聯(lián) git push -u origin master

遠(yuǎn)程倉(cāng)庫(kù)與本地倉(cāng)庫(kù)的關(guān)聯(lián)

下載遠(yuǎn)程倉(cāng)庫(kù)到本地:
git clone <遠(yuǎn)程倉(cāng)庫(kù)的url地址>

1.下載下來的代碼一般只有一個(gè)分支,但是我們最好不要在這個(gè)分支上進(jìn)行修改倦微。
新建一個(gè)develop分支 git checkout -b develop 切換到develop分支 git branch develop
一步到位法:git branch -b develop 新建一個(gè)develop分支妻味,并且切換到develop分支。
以后在修改欣福、提交代碼就是在develop分支上了责球。 開發(fā)完成后就可以合并到master分支上去了。

2.合并分支: 首先切換到要合并的分支拓劝,然后在合并
git checkout -b master
git merge develop 合并develop分支內(nèi)容到master分支雏逾。

3.刪除分支:開發(fā)分支功能完了,代碼也合并了郑临,就可以刪除了
git branch -d develop git branch -D develop 后面這個(gè)是強(qiáng)制刪除分支
注:合并dev分支栖博,請(qǐng)注意--no-ff參數(shù),表示禁用Fast forward模式厢洞。
git merge --no-ff -m "merge with no-ff" develop
本次合并要?jiǎng)?chuàng)建一個(gè)新的commit笛匙,所以加上-m參數(shù),把commit描述寫進(jìn)去犀变。
小結(jié):查看分支:git branch
創(chuàng)建分支:git branch <name>
切換分支:git checkout <name>
創(chuàng)建+切換分支:git checkout -b <name>
合并某分支到當(dāng)前分支:git merge <name>
刪除分支:git branch -d <name>

4.沖突解決:
場(chǎng)景:當(dāng)你在develop分支改變了一個(gè)文件,然后切換到master分支又修改了同一個(gè)文件秋柄。合并代碼的時(shí)候就會(huì)出現(xiàn)沖突获枝。

git status 查看提示的沖突,在master分支上修改沖突內(nèi)容骇笔,在commit即可省店。 然后刪除develop分支。
小結(jié):當(dāng)Git無(wú)法自動(dòng)合并分支時(shí)笨触,就必須首先解決沖突懦傍。解決沖突后,再提交芦劣,合并完成粗俱。
用git log --graph命令可以看到分支合并圖。

5.暫存工作區(qū)

一個(gè)功能還沒有開發(fā)完虚吟,代碼不能提交寸认,然后要緊急修改一個(gè)bug签财,這個(gè)時(shí)候就要把現(xiàn)在的代碼暫存起來。
使用 git stash 命令偏塞,暫存現(xiàn)在的代碼唱蒸。
然后切回master分支,在新建一個(gè)fixbug分支灸叼。 git checkout -b master git branch -b fixbug
然后在這個(gè)fixbug分支神汹,修改好bug,提交代碼古今,在合并到master分支屁魏。git add .; git commit -m "fix a bug" ; git checkout master ; git merge fixbug . git branch -d fixbug.完成本次的bug修復(fù)。

然后你就又可以返回到develop分支繼續(xù)你未完成的開發(fā)任務(wù)了沧卢。
git checkout develop 然后使用 git stash list 查看暫存區(qū)蚁堤。

恢復(fù)之前的工作區(qū)有兩個(gè)辦法:
一是用git stash apply恢復(fù),但是恢復(fù)后但狭,stash內(nèi)容并不刪除披诗,你需要用git stash drop來刪除;
另一種方式是用git stash pop立磁,恢復(fù)的同時(shí)把stash內(nèi)容也刪了呈队;

你可以多次暫存內(nèi)容,然后使用git stash list 命令查看暫存的位置唱歧,使用git stash apply stash@{0} 回復(fù)你想繼續(xù)工作的內(nèi)容宪摧。 @{數(shù)字}這個(gè)數(shù)字就是你多次存儲(chǔ)的序列數(shù)字

6.多人合作
你的小伙伴要在dev分支上開發(fā),就必須創(chuàng)建遠(yuǎn)程origin的dev分支到本地颅崩,于是他用這個(gè)命令創(chuàng)建本地dev分支:
$ git checkout -b dev origin/dev

提交代碼之前一般要先git pull ... 如果git pull也失敗了几于,原因是沒有指定本地dev分支與遠(yuǎn)程origin/dev分支的鏈接,根據(jù)提示沿后,設(shè)置dev和origin/dev的鏈接:
git branch --set-upstream dev origin/dev

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

7.添加標(biāo)簽
git log 默認(rèn)標(biāo)簽是打在最新提交的commit上的
git tag v0.9 6224937 也可以根據(jù)commitID打標(biāo)簽
還可以創(chuàng)建帶有說明的標(biāo)簽喉刘,用-a指定標(biāo)簽名,-m指定說明文字:
git tag -a v0.1 -m "version 0.1 released" 3628164
用命令git show <tagname>可以看到說明文字:

8.操作標(biāo)簽
git tag -d tagName //刪除一個(gè)標(biāo)簽
git push origin tagName 推送某一個(gè)標(biāo)簽到遠(yuǎn)程漆弄。一次性推送所有標(biāo)簽到遠(yuǎn)程 git push origin --tags
如果標(biāo)簽已經(jīng)推送到遠(yuǎn)程睦裳,要?jiǎng)h除遠(yuǎn)程標(biāo)簽就麻煩一點(diǎn),先從本地刪除:
git tag -d v0.9
然后撼唾,從遠(yuǎn)程刪除廉邑。刪除命令也是push,但是格式如下:
git push origin :refs/tags/v0.9

關(guān)聯(lián)倉(cāng)庫(kù)問題:
如果在使用命令git remote add時(shí)報(bào)錯(cuò):
git remote add origin url
fatal: remote origin already exists.
這說明本地庫(kù)已經(jīng)關(guān)聯(lián)了一個(gè)名叫origin的遠(yuǎn)程庫(kù),此時(shí)鬓催,可以先用git remote -v查看遠(yuǎn)程庫(kù)信息:
git remote -v
origin git@github.com:michaelliao/learngit.git (fetch)
origin git@github.com:michaelliao/learngit.git (push)
可以看到肺素,本地庫(kù)已經(jīng)關(guān)聯(lián)了origin的遠(yuǎn)程庫(kù),并且宇驾,該遠(yuǎn)程庫(kù)指向GitHub倍靡。
我們可以刪除已有的GitHub遠(yuǎn)程庫(kù):
git remote rm origin
再關(guān)聯(lián)碼云的遠(yuǎn)程庫(kù)(注意路徑中需要填寫正確的用戶名):
git remote add origin url

當(dāng)你在git pull origin master 命令之后,報(bào)錯(cuò):

 * branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories

這是因?yàn)椋侯A(yù)設(shè)行為不允許合并沒有共同祖先的分支课舍,需要加上--allow-unrelated-histories選項(xiàng),再進(jìn)行pull操作才不會(huì)出現(xiàn)此類錯(cuò)誤信息:
git pull origin master --allow-unrelated-histories

最基本的使用應(yīng)該這些就可以了塌西,git很深,如果只是單純的使用它管理代碼筝尾,這些應(yīng)該可以了捡需。如果想深入研究的在去搜索其他命令吧。

感覺每一個(gè)小點(diǎn)都可以寫一篇文章了筹淫,好多內(nèi)容啊站辉。

1.在本地目錄下關(guān)聯(lián)遠(yuǎn)程repository :
git remote add origin [url]
2.取消本地目錄下關(guān)聯(lián)的遠(yuǎn)程庫(kù):
git remote remove origin
遠(yuǎn)程下載到本地:
git clone url
3.查看版本信息:
git log --pretty=oneline
git log --graph命令可以看到分支合并圖。
4.撤銷修改:
git checkout -- flie --是必不可少的损姜,否則就是切換操作了饰剥。。
已經(jīng)add的文件摧阅,首先:git reset HEAD file 汰蓉,然后再git checkout --file
5.從本地推送分支,使用git push origin branch-name棒卷,如果推送失敗顾孽,先用git pull抓取遠(yuǎn)程的新提交;
6.在本地創(chuàng)建和遠(yuǎn)程分支對(duì)應(yīng)的分支比规,使用git checkout -b branch-name origin/branch-name若厚,本地和遠(yuǎn)程分支的名稱最好一致;
7.建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián)蜒什,使用git branch --set-upstream branch-name origin/branch-name盹沈;
8.用git diff HEAD --file命令可以查看工作區(qū)和版本庫(kù)里面最新版本的區(qū)別
9.設(shè)置別名:
git config --global alias.ci commit
git config --global alias.st status
設(shè)置別名組合:
git config --global alias.psm 'push origin master'
git config --global alias.plm 'pull origin master'

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吃谣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌做裙,老刑警劉巖岗憋,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異锚贱,居然都是意外死亡仔戈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來监徘,“玉大人晋修,你說我怎么就攤上這事』丝” “怎么了墓卦?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)户敬。 經(jīng)常有香客問我落剪,道長(zhǎng),這世上最難降的妖魔是什么尿庐? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任忠怖,我火速辦了婚禮,結(jié)果婚禮上抄瑟,老公的妹妹穿的比我還像新娘凡泣。我一直安慰自己,他們只是感情好皮假,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布鞋拟。 她就那樣靜靜地躺著,像睡著了一般钞翔。 火紅的嫁衣襯著肌膚如雪严卖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天布轿,我揣著相機(jī)與錄音哮笆,去河邊找鬼。 笑死汰扭,一個(gè)胖子當(dāng)著我的面吹牛稠肘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播萝毛,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼项阴,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了笆包?” 一聲冷哼從身側(cè)響起环揽,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎庵佣,沒想到半個(gè)月后歉胶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巴粪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年通今,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了粥谬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辫塌,死狀恐怖漏策,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情臼氨,我是刑警寧澤掺喻,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站一也,受9級(jí)特大地震影響巢寡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜椰苟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一抑月、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舆蝴,春花似錦谦絮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至赠潦,卻和暖如春叫胖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背她奥。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工瓮增, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人哩俭。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓绷跑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親凡资。 傳聞我的和親對(duì)象是個(gè)殘疾皇子砸捏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348