一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Git 常用命令總結(jié),掌握這些,輕松駕馭版本管理

 昵稱(chēng)QvKmxOqV 2020-03-03

最近公司的代碼管理工具要從SVN轉(zhuǎn)到Git上,因此雖然之前用過(guò)Git,但是都是一些簡(jiǎn)單的推送提交,因此還是有必要進(jìn)行一些系統(tǒng)的學(xué)習(xí),這里做一下筆記,以備后詢(xún),且不定期更新。

關(guān)于SVN和Git的比較已經(jīng)有很多文章說(shuō)過(guò)了,就不再贅述,本文的重點(diǎn)是如何使用常用的Git命令進(jìn)行操作,冷門(mén)的就不說(shuō)了,且比較零散,系統(tǒng)的學(xué)習(xí)推介廖雪峰的Git教程。

聲明

  1. 下面用戶(hù)名都為 SHERlocked93,請(qǐng)自行修改成自己的用戶(hù)名

1. 概覽

  • 工作區(qū) Workspace

  • 暫存區(qū) Stage / Index

  • 本地倉(cāng)庫(kù) Repository

  • 遠(yuǎn)程倉(cāng)庫(kù) Remote

2. 修改

2.1 暫存修改

操作一覽

操作bash
創(chuàng)建stashgit stash
查看git stash list
應(yīng)用git stash apply stash@{ <num>}
刪除git stash drop stash@{ <num>}
還原上一個(gè)暫存并刪除暫存(如無(wú)conflict)git stash pop

如果在工作的時(shí)候出現(xiàn)了臨時(shí)需要解決的問(wèn)題,而你又不希望提交,那么有個(gè) stash功能

  1. git stash

在暫存后工作區(qū)會(huì)回退到最近的一個(gè)commit的狀態(tài),以便開(kāi)建新分支;比如我們修復(fù)bug時(shí),我們會(huì)通過(guò)創(chuàng)建新的bug分支進(jìn)行修復(fù),然后合并,最后刪除;

當(dāng)手頭工作沒(méi)有完成時(shí),先把工作現(xiàn)場(chǎng) git stash一下,然后去修復(fù)bug,修復(fù)后,再 git stash pop,回到工作現(xiàn)場(chǎng)。

2.2 撤銷(xiāo)修改

還未提交到暫存區(qū)

當(dāng)修改還沒(méi)有被 add的時(shí)候,可以使用

  1. git checkout -- filename.txt

來(lái)丟棄工作區(qū)某文件的修改,當(dāng)然也可以把后面的文件改成 *來(lái)撤銷(xiāo)所有文件的修改。這是用倉(cāng)庫(kù)的文件覆蓋工作區(qū)的文件。

注意這里用的是 --,如果沒(méi)有這個(gè) --的話就變成切換分支了。

還未提交到倉(cāng)庫(kù)

如果你的修改已經(jīng)被 add到了暫存區(qū),但是還沒(méi)有被 commit,那么可以使用

  1. git reset HEAD filename.txt

  2. git checkout -- filename.txt

首先用 reset來(lái)把修改撤回到工作區(qū),再使用上面的 checkout命令撤回工作區(qū)的修改。這里的 reset相當(dāng)于 add的反操作。

已經(jīng)提交到倉(cāng)庫(kù)

則可以版本回退

  1. git reset --hard 15zdx2s

這里的 --hard表示強(qiáng)制回退,丟棄本地的修改。這個(gè)回退比較野蠻,該版本號(hào)之后的提交都將不可見(jiàn)。

撤銷(xiāo)之前某一個(gè)提交

git revert撤銷(xiāo)一個(gè)提交的同時(shí)會(huì)創(chuàng)建一個(gè)新的提交,這是一個(gè)安全的方法,因?yàn)樗粫?huì)重寫(xiě)提交歷史。但實(shí)現(xiàn)上和reset是完全不同的。它撤銷(xiāo)這個(gè)提交引入的更改,然后在最后加上一個(gè)撤銷(xiāo)了更改的新提交,而不是從項(xiàng)目歷史中移除這個(gè)提交。

  1. git revert 46af7z6

相較于 reset , revert不會(huì)改變項(xiàng)目歷史,對(duì)那些已經(jīng)發(fā)布到共享倉(cāng)庫(kù)的提交來(lái)說(shuō)這是一個(gè)安全的操作。其次 git revert 可以將提交歷史中的任何一個(gè)提交撤銷(xiāo)、而 reset會(huì)把歷史上某個(gè)提交及之后所有的提交都移除掉,這太野蠻了。

相比 reset,它不會(huì)改變現(xiàn)在的提交歷史。因此, revert 可以用在公共分支上, reset 應(yīng)該用在私有分支上。

合并commit

如果已經(jīng) commit了怎么辦,如果要撤回目前的 commit,可以把它合并到上一個(gè) commit

  1. git rebase -i HEAD~~

在出現(xiàn)的兩個(gè)提交信息的 pick改為 fixup

3. 分支操作

3.1 創(chuàng)建/查看/合并分支

操作一覽

操作bash
查看分支git branch
查看本地和遠(yuǎn)程分支git branch -a
在target分支上創(chuàng)建分支,沒(méi)有則從當(dāng)前分支git branch <branch-name> <target-branch>
創(chuàng)建并切換分支git checkout -b <branch-name>
合并某分支到當(dāng)前分支git merge <branch-name>
刪除分支,只能刪參與了合并的git branch -d <branch-name>
強(qiáng)行刪除git branch -D <branch-name>
刪除遠(yuǎn)程分支git push origin : <remote-branch-name>

創(chuàng)建分支

  1. # 創(chuàng)建新分支

  2. git branch bug-fix

  3. # 查看分支,-a查看本地和遠(yuǎn)程的分支,-r查看遠(yuǎn)程分支,-l或沒(méi)有只查看本地

  4. git branch -a

  5. # 切換到剛剛創(chuàng)建的分支

  6. git checkout bug-fix

上面兩個(gè)步驟可以合并為

  1. # 創(chuàng)建并切換到分支

  2. git checkout -b bug-fix

如果修改一下本地文件之后在這個(gè)分支繼續(xù)培育一個(gè)版本之后,怎么去合并到主分支呢

  1. git add *

  2. git commit -m 'some change'

  3. # 切換到主分支

  4. git checkout master

  5. # 合并分支

  6. git merge bug-fix

  7. # 刪除分支 (可選)

  8. git branch -d bug-fix

如果master分支和新的分支都各自培育了版本,那么自動(dòng)合并通常會(huì)失敗,發(fā)生沖突 conflict,此時(shí)需要打開(kāi)文件解決沖突之后 commit一個(gè)版本以完成合并

  1. git add *

  2. git commit -m 'branch merge'

這里提一下, merge的時(shí)候有幾個(gè)主要模式, --no-fffast-forward,其中 fast-forward是默認(rèn)的

  1. fast-forward:在master開(kāi)始的新分支前進(jìn)了幾個(gè)版本之后如果需要merge回來(lái),此時(shí)master并沒(méi)有前進(jìn),那么這個(gè)模式就是把HEAD與master指針指向新分支上,完成合并。這種情況如果刪除分支,則會(huì)丟失分支信息,因?yàn)樵谶@個(gè)過(guò)程中并沒(méi)有創(chuàng)建commit。

  2. --no-ff:關(guān)閉默認(rèn)的 fast-forward模式,也就是在merge的時(shí)候生成一個(gè)新的commit,這樣在分支歷史上就可以看出分支信息。

3.2 遠(yuǎn)程倉(cāng)庫(kù)操作

操作一覽

操作bash
克隆git clone <url>
添加遠(yuǎn)程倉(cāng)庫(kù)git remote add <name> <url>
刪除遠(yuǎn)程倉(cāng)庫(kù)git remote rm <name>
拉取git pull <remote-branch-name> <local-branch-name>
推送本地所有分支到遠(yuǎn)程git push --all origin
推送到遠(yuǎn)程同名分支git push origin <local-branch-name>
推送本地分支到遠(yuǎn)程mastergit push origin <local-branch-name>master
把當(dāng)前本地分支推送并創(chuàng)建到遠(yuǎn)程git push origin
檢出遠(yuǎn)程分支git checkout -b <new-local-branch-name> origin/ <remote-branch-name>

關(guān)于各個(gè)分支,哪些需要推送呢

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

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

  3. bug分支只用于在本地修復(fù)bug,就沒(méi)必要推到遠(yuǎn)程了,除非老板要看看你每周到底修復(fù)了幾個(gè)bug;

  4. feature分支是否推到遠(yuǎn)程,取決于你是否和你的小伙伴合作在上面開(kāi)發(fā)。

直接 clone

在github上創(chuàng)建一個(gè)新的項(xiàng)目之后,比如叫 learn-git,那么可以直接 clone下來(lái),注意創(chuàng)建的時(shí)候不要選擇 Initializethisrepositorywitha README,我們要的是一個(gè)空的倉(cāng)庫(kù)

  1. git clone https://github.com/SHERlocked93/learn-git.git

這樣在本地就直接創(chuàng)建了一個(gè)空的文件夾 learn-git,當(dāng)然里面有 .git文件夾。也可以使用SSH地址來(lái)clone,速度會(huì)快一些,也不用每次推送都輸入口令,推介使用這種

  1. git clone git@github.com:SHERlocked93/learn-git.git

添加一個(gè)文件 filename.txt之后

  1. git add filename.txt

  2. git commit -m 'add filename.txt'

  3. git push -u origin master

這樣就把本地新建的文件push到了遠(yuǎn)程倉(cāng)庫(kù)

本地與遠(yuǎn)程建立關(guān)聯(lián)

如果已經(jīng)有了本地工程文件夾,如何分享到github遠(yuǎn)程倉(cāng)庫(kù)呢,當(dāng)然此時(shí)我們已經(jīng)在github上創(chuàng)建了一個(gè)新的空白項(xiàng)目,還是叫 learn-git,在本地文件夾中

  1. git init

  2. # 關(guān)聯(lián)遠(yuǎn)程庫(kù)

  3. git remote add origin git@github.com:SHERlocked93/learn-git.git

  4. git push -u origin master

就可以了,如果你的遠(yuǎn)程倉(cāng)庫(kù)已經(jīng)有了提交,那么在 push之前需要

  1. # 允許不想干庫(kù)合并

  2. git pull origin master --allow-unrelated-histories

  3. git push -u origin master

先拉取遠(yuǎn)程分支,注意這里 --allow-unrelated-histories允許兩個(gè)不想干的分支強(qiáng)行合并,再 push;這樣在github的網(wǎng)站上還能看到commit記錄。

也可以強(qiáng)硬一點(diǎn)直接強(qiáng)行推送

  1. # -f 強(qiáng)行推送

  2. git push -u origin master -f

這樣本地倉(cāng)庫(kù)就直接把遠(yuǎn)程倉(cāng)庫(kù)覆蓋了,且github上也看不到歷史 commit了,如果不想被同事槍擊的話,還是推介上一種做法。

同步遠(yuǎn)程倉(cāng)庫(kù)

那么已經(jīng)clone的倉(cāng)庫(kù)如果希望同步原倉(cāng)庫(kù)新的提交怎么辦

  1. # 從遠(yuǎn)程分支拉取代碼到本地

  2. git pull upstream master

  3. # push到自己的庫(kù)里

  4. git push origin master

3.3 多人協(xié)作

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

  1. 首先,可以試圖用 git push origin<branch-name>推送自己的修改;

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

  3. 如果合并有沖突,則解決沖突,并在本地提交;

  4. 沒(méi)有沖突或者解決掉沖突后,再用 git push origin<branch-name>推送就能成功

從遠(yuǎn)程抓取分支,使用 git pull,如果有沖突,要先處理沖突, add->commit->push。如果 git pull提示no tracking information,則說(shuō)明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒(méi)有創(chuàng)建,用命令 git branch--set-upstream-to<branch-name>origin/<branch-name>。

4. 標(biāo)簽操作

操作一覽

操作bash
查看所有標(biāo)簽git tag
新建標(biāo)簽git tag <tagname>
新建并制定說(shuō)明git tag <tagname> -m <message> <bash>
查看標(biāo)簽說(shuō)明git show <tagname>
刪除標(biāo)簽git tag -d <tagname>
推送某個(gè)標(biāo)簽到遠(yuǎn)程git push origin <tagname>
推送所有未推送到遠(yuǎn)程的本地標(biāo)簽git push origin --tags
合并遠(yuǎn)程倉(cāng)庫(kù)的標(biāo)簽到本地git pull origin --tags
刪除遠(yuǎn)程標(biāo)簽git push origin :refs/tags/ <tagname>

如果要?jiǎng)h除遠(yuǎn)程分支,需要

  1. # 首先刪除本地tag,假如tag是v0.9

  2. git tag -d v0.9

  3. # 再?gòu)倪h(yuǎn)程刪除

  4. git push origin :refs/tags/v0.9

5. 提交格式

type:

  • feat: 新特性,添加功能

  • fix: 修改bug

  • refactor: 代碼重構(gòu)

  • docs: 文檔修改

  • style: 代碼格式修改, 注意不是 css 修改

  • test: 測(cè)試用例修改

  • chore: 其他修改, 比如構(gòu)建流程, 依賴(lài)管理.


網(wǎng)上的帖子大多深淺不一,甚至有些前后矛盾,在下的文章都是學(xué)習(xí)過(guò)程中的總結(jié),如果發(fā)現(xiàn)錯(cuò)誤,歡迎留言指出~

推介閱讀:

  1. 廖雪峰 - Git教程

  2. github實(shí)現(xiàn)本地倉(cāng)庫(kù)與遠(yuǎn)程倉(cāng)庫(kù)同步

  3. 圖解 Git 命令

  4. git基本操作,一篇文章就夠了!

  5. 團(tuán)隊(duì)協(xié)作中的 Github flow 工作流程

  6. git 命令大全

附件

  1. Git常用命令速查表:


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    日韩欧美二区中文字幕| 国产毛片不卡视频在线| 中文字字幕在线中文乱码二区| 国产成人一区二区三区久久 | 国产美女精品人人做人人爽 | 中日韩免费一区二区三区| 国产精品日韩精品一区| av在线免费观看在线免费观看| 好吊妞视频免费在线观看| 激情五月激情婷婷丁香| 国产成人精品99在线观看| 激情中文字幕在线观看| 欧美日韩国产精品自在自线| 99久久国产综合精品二区| 不卡免费成人日韩精品| 激情图日韩精品中文字幕| 欧美成人精品一区二区久久| 中文字幕人妻日本一区二区| 亚洲欧美国产中文色妇| 亚洲中文字幕高清乱码毛片 | 欧美日韩精品综合在线| 99久久免费中文字幕| 精品人妻av区波多野结依| 伊人色综合久久伊人婷婷| 99久久精品视频一区二区| 欧美黑人黄色一区二区| 大香蕉伊人精品在线观看| 国产精品久久熟女吞精| 亚洲国产精品久久综合网| 高清在线精品一区二区| 国产不卡最新在线视频| 久久国产精品熟女一区二区三区| 黄片在线免费看日韩欧美| 国产肥妇一区二区熟女精品| 微拍一区二区三区福利| 亚洲av日韩一区二区三区四区| 日本高清视频在线观看不卡| 少妇视频一区二区三区| 人妻亚洲一区二区三区| 黑鬼糟蹋少妇资源在线观看| 极品熟女一区二区三区|