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

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

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

用到新的命令或者遇到新的問題時我會更新。若有疏漏,敬請指正。

Git官方文檔

Part.A 常用命令

一、 基礎(chǔ)命令

git.jpg
    # 初始化
     git init

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

    # 克隆倉庫并重命名為myrepo
     git clone git@github.com:username/repo.git myrepo

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

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

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

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

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

    # 推送當(dāng)前改動到遠程庫(origin)的master分支
     git push origin master 

二、進階命令

地址標(biāo)簽命令

    # 查看本地庫里記錄的遠程庫地址
     git remote -v

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

    # 再添加一個叫 gitlab 的遠程庫
     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)簽對應(yīng)的地址
     git remote set-url origin git@github.com:username/repo2.git
     
    # 把 gitlab 標(biāo)簽改名為coding
     git remote rename gitlab coding

分支命令

    # 創(chuàng)建本地庫hotfix分支
     git branch hotfix
     
    # 切換到hotfix分支,進行修改
     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 強制刪除
     git branch -d <branch> 
branch-example.png

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

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

    # 相當(dāng)于 git add -u 加上 git commit -m "內(nèi)容"
    # 有些文章寫的 "相當(dāng)于git add . 加上 git commit -m" 是錯的?。?!
    # 只能更新和刪除,不能添加新文件??!
     git commit -am "內(nèi)容"

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

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

    # 如果只有一個<remote>只有一個<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 -A 、 git 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是錯誤寫法,會報錯

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

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

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

總之,知道前兩點就可以了。

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

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

知道有這個事兒就行了,出問題再說吧。

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

git fetch

    # 這個命令將某個遠程主機的更新全部取回本地
    # 如果沒寫<remote>則獲取所有<remote>的更新
     git fetch <remote>

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

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

git fetch 獲取更新的方法:

    # 在本地新建一個temp分支,并將遠程倉庫的代碼下載到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兩個步驟的結(jié)合。
如果本地沒有做過改動,則可以直接git pull更新到遠程倉庫的最新代碼,更方便!
如果本地有過改動,使用git pull命令后會有沖突,不過沒關(guān)系,根據(jù)bash的提示進行操作即可。

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

首先要知道git有三個區(qū)工作區(qū)(working directroy)、暫存區(qū)(index)、版本庫(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注釋寫錯了或者commit錯了,回到上次就用這個
 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中也不會顯示,但是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,不會重置工作區(qū),暫存區(qū)有改動時無法revert

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

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

以上!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容