Git備忘錄-常用命令以及遇到的問題

Git是前端常用工具,但對(duì)于還在自學(xué)中的前端击胜,用的真是不多,導(dǎo)致用的時(shí)候忘記命令然后重學(xué)一遍役纹。鑒于git原理與入門遍地都是偶摔,這里我總結(jié)一下常用命令和遇到過的問題,做個(gè)備忘參考促脉。

此文章極其適合學(xué)過git但是經(jīng)常忘記的小伙伴們作為備忘和復(fù)習(xí)辰斋!

用到新的命令或者遇到新的問題時(shí)我會(huì)更新。若有疏漏瘸味,敬請(qǐng)指正宫仗。

Git官方文檔

Part.A 常用命令

一、 基礎(chǔ)命令

git.jpg
    # 初始化
     git init

    # 克隆倉(cāng)庫(kù)(當(dāng)然第一次克隆要先生成添加ssh key)硫戈,只獲取master分支
     git clone git@github.com:username/repo.git <文件夾名(可省略)>

    # 克隆倉(cāng)庫(kù)并重命名為myrepo
     git clone git@github.com:username/repo.git myrepo

    # 查看狀態(tài)
     git status

    # 簡(jiǎn)短查看狀態(tài)锰什,-s 指簡(jiǎn)潔查看,-b 顯示branch
     git status -sb

    # 添加到暫存區(qū)(stage和index都是指暫存區(qū))
     git add .

    # 添加到commited丁逝,-m 指message
     git commit -m "內(nèi)容"

    # 查看commit歷史,每次commit會(huì)產(chǎn)生一個(gè)commit id
     git log

    # 推送當(dāng)前改動(dòng)到遠(yuǎn)程庫(kù)(origin)的master分支
     git push origin master 

二梭姓、進(jìn)階命令

地址標(biāo)簽命令

    # 查看本地庫(kù)里記錄的遠(yuǎn)程庫(kù)地址
     git remote -v

    # 這里把遠(yuǎn)程庫(kù)的地址加個(gè)標(biāo)簽霜幼,叫origin
    # origin其實(shí)就是這個(gè)遠(yuǎn)程庫(kù)的標(biāo)簽(別名)
    # 常用于github新建空白倉(cāng)庫(kù)后,把本地倉(cāng)庫(kù)傳上去
     git remote add origin git@github.com:username/repo.git

    # 再添加一個(gè)叫 gitlab 的遠(yuǎn)程庫(kù)
     git remote add gitlab git@gitlab.com:username/repo.git

    # 推送到 gitlab 標(biāo)簽的地址上
     git push gitlab master
     
    # 刪除 gitlab 標(biāo)簽
     git remote remove gitlab
     
    # 修改 origin 標(biāo)簽對(duì)應(yīng)的地址
     git remote set-url origin git@github.com:username/repo2.git
     
    # 把 gitlab 標(biāo)簽改名為coding
     git remote rename gitlab coding

分支命令

    # 創(chuàng)建本地庫(kù)hotfix分支
     git branch hotfix
     
    # 切換到hotfix分支誉尖,進(jìn)行修改
     git checkout hotfix

    # 切換到master分支罪既,繼續(xù)master分支的開發(fā)
     git checkout master

    # 推送到origin地址的hotfix分支上
     git push origin hotfix

    # 把hotfix分支的內(nèi)容合并到當(dāng)前分支(master)
     git merge hotfix

    # 刪除分支 -d 刪除分支,-D 強(qiáng)制刪除
     git branch -d <branch> 
branch-example.png

上圖中從左往右開發(fā)铡恕,HEAD指的是當(dāng)前分支琢感。圖中在master分支的第三次提交(f30ab)上創(chuàng)建了一個(gè)hotfix分支,進(jìn)行了修改探熔。而master繼續(xù)開發(fā)驹针。之后將hotfix分支merge到master,產(chǎn)生了fe532诀艰。

三柬甥、常用的其他命令和衍生用法(待補(bǔ)充)

    # 相當(dāng)于 git add -u 加上 git commit -m "內(nèi)容"
    # 有些文章寫的 "相當(dāng)于git add . 加上 git commit -m" 是錯(cuò)的!F渎ⅰ苛蒲!
    # 只能更新和刪除,不能添加新文件B搪臂外!
     git commit -am "內(nèi)容"

    # 基本等同于 git fetch 加上 git merge,獲取后合并到指定的本地分支
    # 與git fetch 的區(qū)別詳見Q&A
     git pull <remote> <遠(yuǎn)程branch>:<本地branch>

    # 一般遠(yuǎn)程分支和本地分支同名,后面不用寫
     git pull <remote> <遠(yuǎn)程branch>

    # 如果只有一個(gè)<remote>只有一個(gè)<branch>漏健,后面不寫也行
     git pull

    # 相當(dāng)于git branch xxx 加上 git checkout xxx
     git checkout -b xxx

    # 只克隆最近一次提交嚎货,也可以指定次數(shù)
     git clone git@github.com:username/repo.git --depth=1

Part.B Q&A

Q1. git add -Agit add . 漾肮、 git add -u 區(qū)別

網(wǎng)上有些文章還是git老版本厂抖,和新版本有區(qū)別。

Git Version 1.x

gitversion1.jpg

Git Version 2.x

gitversion2.jpg

git add -A 等同于 git add --all
git add -u 等同于 git add --update
git add -a是錯(cuò)誤寫法克懊,會(huì)報(bào)錯(cuò)

Q2. git add *git add .區(qū)別忱辅?

關(guān)于這個(gè)問題基本搜不到相關(guān)文章,后來在stackoverflow上找到了一些解答谭溉,試著總結(jié)一下墙懂。以下情況我在git 2.18.0.windows.1中測(cè)試確認(rèn)過。

  1. * 是shell提供的通配符扮念,git add *.html 會(huì)匹配所有html文件损搬,這是當(dāng)通配符的用法
  2. git add * 一般不匹配以.開頭的文件(例如.gitignore),而 git add . 會(huì)匹配所有
  3. 當(dāng)文件夾中有且只有以 . 開頭的文件時(shí)柜与,git add *會(huì)匹配以 . 開頭這樣的文件
  4. .gitignore中有非 . 開頭的文件時(shí)巧勤,用 git add * 會(huì)有提示"The following paths are ignored by one of your .gitignore files:",而 git add .不會(huì)有這樣提示弄匕,但是兩者的效果是一樣的(除了 git add * 不會(huì)匹配 . 開頭的文件)

總之颅悉,知道前兩點(diǎn)就可以了。

Q3. warning: LF will be replaced by CRLF 問題迁匠?

關(guān)于git提示“warning: LF will be replaced by CRLF”終極解答
Dos和Windows平臺(tái): 使用回車(CR)和換行(LF)兩個(gè)字符來結(jié)束一行剩瓶,回車+換行(CR+LF),即“\r\n”城丧;
Mac 和 Linux平臺(tái):只使用換行(LF)一個(gè)字符來結(jié)束一行延曙,即“\n”;
所以有個(gè)轉(zhuǎn)換的問題亡哄,git安裝的時(shí)候就有相關(guān)選項(xiàng)枝缔,安裝完也可以輸入命令設(shè)置。

知道有這個(gè)事兒就行了磺平,出問題再說吧魂仍。

Q4. git fetchgit pull的區(qū)別和使用?

git fetch

    # 這個(gè)命令將某個(gè)遠(yuǎn)程主機(jī)的更新全部取回本地
    # 如果沒寫<remote>則獲取所有<remote>的更新
     git fetch <remote>

    # 如果只想取回特定分支的更新拣挪,可以指定分支名
     git fetch <remote> <branch>

    # 查看FETCH_HEAD擦酌,里面有遠(yuǎn)程倉(cāng)庫(kù)的更改記錄
    # 而git log中只有當(dāng)前本地的!
     git log -p FETCH_HEAD

git fetch 獲取更新的方法:

    # 在本地新建一個(gè)temp分支菠劝,并將遠(yuǎn)程倉(cāng)庫(kù)的代碼下載到temp分支中
    git fetch origin master:temp

    # 比較本地代碼與temp分支中代碼的區(qū)別
    # 下列幾條命令都可以查看區(qū)別赊舶,但略有不同,按需使用
    git diff temp
    git diff master..temp
    git diff master ^temp
    git log -p master..temp
    
    # 合并temp分支到當(dāng)前本地分支
    git merge temp
  
    # 刪除合并完沒用的temp分支
    git branch -d temp

git pull可以認(rèn)為是git fetchgit merge兩個(gè)步驟的結(jié)合。
如果本地沒有做過改動(dòng)笼平,則可以直接git pull更新到遠(yuǎn)程倉(cāng)庫(kù)的最新代碼园骆,更方便!
如果本地有過改動(dòng)寓调,使用git pull命令后會(huì)有沖突锌唾,不過沒關(guān)系,根據(jù)bash的提示進(jìn)行操作即可夺英。

Q5. git reset(--soft --hard)git revert 的區(qū)別?

首先要知道git有三個(gè)區(qū)工作區(qū)(working directroy)晌涕、暫存區(qū)(index)、版本庫(kù)(commit history)痛悯,這屬于git基本原理余黎,不作贅述。

git reset
等同于git reset --mixed, --mixed 是 reset 的默認(rèn)參數(shù)载萌。
作用是重置暫存區(qū)惧财,即取消之前的add,工作區(qū)的修改仍然保留扭仁。

git reset --soft xxx
作用是回到某次commit垮衷,但是暫存區(qū)和工作區(qū)做過的修改仍然保留。

# 回到上次commit之前乖坠,HEAD~1 指的是HEAD指針往前一格
# 比如你commit注釋寫錯(cuò)了或者commit錯(cuò)了帘靡,回到上次就用這個(gè)
 git reset --soft HEAD~1

# 根據(jù)commit id,回到某次commit之后
 git reset --hard 03dd660

git reset --hard xxx
作用是回到某次commit瓤帚,并且重置暫存區(qū)和工作區(qū)。
例如發(fā)現(xiàn)修改了不該改的分支涩赢,可以在老板發(fā)現(xiàn)前讀檔戈次。做過的修改就當(dāng)做沒有發(fā)生,git log中也不會(huì)顯示筒扒,但是git reflog 命令還是能看到怯邪,并且還能再reset回去。

# 回到上上次commit之前花墩,HEAD~1 指的是HEAD指針往前兩格
 git reset --hard HEAD~2
# 根據(jù)commit id悬秉,回到某次commit之后
 git reset --hard 03dd660

git revert
作用是復(fù)制以前的commit作為最新的commit,不會(huì)重置工作區(qū)冰蘑,暫存區(qū)有改動(dòng)時(shí)無法revert

# 回到上次commit之前(即上上次之后)和泌,并作為新的內(nèi)容commit
 git revert HEAD
# 回到上上次commit之前,注意這邊計(jì)數(shù)也和reset不同
 git revert HEAD~1

區(qū)別在于祠肥,reset會(huì)把恢復(fù)點(diǎn)后面的commit刪掉武氓,當(dāng)前分支上的commit減少;
而revert會(huì)復(fù)制指定的某次commit到當(dāng)前分支,分支上的commit數(shù)變多县恕!

以上东羹!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市忠烛,隨后出現(xiàn)的幾起案子属提,更是在濱河造成了極大的恐慌,老刑警劉巖美尸,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冤议,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡火惊,警方通過查閱死者的電腦和手機(jī)求类,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屹耐,“玉大人尸疆,你說我怎么就攤上這事』塘耄” “怎么了寿弱?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)按灶。 經(jīng)常有香客問我症革,道長(zhǎng),這世上最難降的妖魔是什么鸯旁? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任噪矛,我火速辦了婚禮,結(jié)果婚禮上铺罢,老公的妹妹穿的比我還像新娘艇挨。我一直安慰自己,他們只是感情好韭赘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布缩滨。 她就那樣靜靜地躺著,像睡著了一般泉瞻。 火紅的嫁衣襯著肌膚如雪脉漏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天袖牙,我揣著相機(jī)與錄音侧巨,去河邊找鬼。 笑死贼陶,一個(gè)胖子當(dāng)著我的面吹牛刃泡,可吹牛的內(nèi)容都是我干的巧娱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼烘贴,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼禁添!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起桨踪,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤老翘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后锻离,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铺峭,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年汽纠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了卫键。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡虱朵,死狀恐怖莉炉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碴犬,我是刑警寧澤絮宁,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站服协,受9級(jí)特大地震影響绍昂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜偿荷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一窘游、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧跳纳,春花似錦张峰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撩荣。三九已至铣揉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間餐曹,已是汗流浹背逛拱。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留台猴,地道東北人朽合。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓俱两,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親曹步。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宪彩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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

  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,471評(píng)論 1 26
  • 一、 Git 常用命令速查 git branch 查看本地所有分支 git status 查看當(dāng)前狀態(tài) git c...
    LOVE_晴天閱讀 2,324評(píng)論 0 10
  • 配置 首先是配置帳號(hào)信息 ssh -T git@github.com#登陸github 修改項(xiàng)目中的個(gè)人信息 1 ...
    rochuan閱讀 722評(píng)論 1 1
  • 官網(wǎng)下載Tomcat(tomcat.apache.org)讲婚,選擇?tar.gz格式的尿孔,我用的是tomcat8 解壓...
    強(qiáng)強(qiáng)劉閱讀 184評(píng)論 0 1
  • 4種創(chuàng)建方式。 //UIApplication NSUserDefault NSNotificationCente...
    nothing_c閱讀 110評(píng)論 0 0