git常見的場(chǎng)景和對(duì)應(yīng)的命令

一、使用git前需要做的最小配置

1、設(shè)置user.name和user.email

git config --global user.name 'your_name'
git config --global user.email 'you_email@domain.com'

2、config的三個(gè)作用域
git config --local # 只對(duì)某個(gè)倉(cāng)庫(kù)有效;缺省時(shí),等于```local```
git config --global # 對(duì)當(dāng)前用戶所有倉(cāng)庫(kù)有效
git config --system # 對(duì)系統(tǒng)所有登錄的用戶有效

顯示config的配置,加--list即可

git config --list --local
git config --list --global 
git config --list --system 

q鍵退出查看頁(yè)面

二、創(chuàng)建git倉(cāng)庫(kù)

有兩種場(chǎng)景

1、把已有的項(xiàng)目加入到git管理

將本地已有項(xiàng)目上傳到新建git倉(cāng)庫(kù)

2、新建的項(xiàng)目加入到git管理
cd 某個(gè)文件夾
git init you_project # 會(huì)在當(dāng)前路徑下創(chuàng)建和項(xiàng)目名稱同名的文件夾
cd you_project # 該文件夾下會(huì)有個(gè).git的隱藏文件夾,是git的核心文件,不能刪

三、通過commit來(lái)認(rèn)識(shí)工作區(qū)和暫存區(qū)

# 工作區(qū)就是本地有.git文件的目錄
git add index.html git-logo  # 從工作區(qū)添加到暫存區(qū)
git commit -m "正常提交1"  # 正式提交和說(shuō)明;從暫存區(qū)提交到版本歷史

三、提交過的文件改名

場(chǎng)景:readme改名成readme.md
方式一:

mv readme readme.md # 刪除readme ,新增readme.md 
git add readme.md # 把readme.md 添加到暫存區(qū)
git rm readme # 刪除暫存區(qū)的readme 
git status # 查看狀態(tài),此時(shí)git的打印區(qū)會(huì)顯示readme改名成了eadme.md 
  • 清空暫存區(qū)的所有文件(很危險(xiǎn),建議不要用)
    git reset --hard

方式二:

git mv readme readme.md # 直接暫存區(qū)改名
git status # 查看狀態(tài),此時(shí)git的打印區(qū)會(huì)顯示readme改名成了eadme.md 
git commit -m "readme 改名為 readme.md" # 從暫存區(qū)提交到版本歷史

四、查看版本演變歷史日志

git log

  • 查看列表
    git log --oneline
  • 指定最近的4次commit
    git log -n4 --oneline
  • 查看所有分支的日志
    git log -all
  • 圖形化查看日志
    git log --all --graph
  • 也可以用圖形化界面來(lái)查看歷史日志
    gitk # 打開圖形化界面

五、分支相關(guān)的命令

  • 創(chuàng)建分支
    $ git branch test
  • 切換分支
    git checkout iss53
  • 創(chuàng)建并切換分支
    git checkout -b test
  • 查看現(xiàn)有分支以及關(guān)系
    git branch -av

    gitk -all
  • 刪除分支
    git branch -d test
    或:
    git branch -D test

六、commit相關(guān)的命令

  • 正式提交和說(shuō)明;從暫存區(qū)提交到版本歷史
    git commit -m "說(shuō)明"
  • 查看commit歷史日志
    git log -x,x可指定次數(shù)
  • 修改最近一次commit的message
    git commit --amend,會(huì)進(jìn)入一個(gè)vi界面,可在里面對(duì)commit的message內(nèi)容進(jìn)行修改,操作方式和vi一樣
  • 修改歷史commit的message
    1.首先輸入命令:git rebase -i 要修改的commit的父commit的hash id號(hào)
    2.然后在reabse界面中,進(jìn)行內(nèi)容修改。由于現(xiàn)在要對(duì)4292430開頭的commit版本的message進(jìn)行修改,所以相對(duì)的行中的pick改成reword,然后:wq!保存退出
    3.在步驟2后,會(huì)自動(dòng)跳轉(zhuǎn)到4292430開頭的commit版本的vi內(nèi)容頁(yè)面,此時(shí)修改界面的message內(nèi)容,并:wq!保存退出即可
rebase命令
rebase界面-修改命令
修改message內(nèi)容
修改結(jié)果
  • 把連續(xù)的多個(gè)commit整理成1個(gè)commit
    1.首先查看歷史commit:git log -條數(shù)
    2.假設(shè)想要合并最近的4次的commit,那么則填寫最舊一次的父級(jí)commit的id(也就是倒數(shù)第5次的):git rebase -i 倒數(shù)第5次的id
    3.在界面中,把需要合并的版本前面的pick改成s````;注意,要被合并到的版本內(nèi)容無(wú)需改動(dòng)。然后:wq保存退出 4.步驟3后,會(huì)跳出個(gè)說(shuō)明界面;在界面中,填寫本次合并的原因,并:wq```保存退出

    多個(gè)commit合并

    說(shuō)明界面

    合并結(jié)果

  • 把間隔不連續(xù)的多個(gè)commit整理成1個(gè)commit
    示例:合并圖中的2個(gè)commit

    目的

    1.因?yàn)橐喜⒌钠渲幸粋€(gè)commit,屬于最初的父級(jí),所以id寫它的即可:git rebase -i xxx
    2.打開的文件內(nèi)容中,只會(huì)有父級(jí)以外的內(nèi)容(這里只有2條),所以需要手動(dòng)加入最初父級(jí)的操作內(nèi)容信息
    3.把要合并的commit版本的內(nèi)容復(fù)制,寫到要被合并的commit版本的下面,然后把pick改成s,接著刪除原本的內(nèi)容(如果有多條也是如此操作),然后:wq保存退出
    4.步驟3后,會(huì)跳出個(gè)說(shuō)明界面;在界面中,填寫本次合并的原因,并:wq保存退出

步驟2

步驟3

步驟4

合并結(jié)果
  • 清除最近的幾次commit提交(把HEAD、暫存區(qū)和工作區(qū)都恢復(fù)到指定commit版本的文件情況)
    1.首先查看最近的幾次提交git log
    2.恢復(fù)內(nèi)容到指定的commit版本(謹(jǐn)慎使用):git reset --hard commit版本的hash id

    結(jié)果

  • 查看不同分支最新的commit的差異
    1.所有文件差異:git diff 分支名1 分支名2
    2.指定文件差異:git diff 分支名1 分支名2 -- 文件名1 文件名2 ...
    PS.其實(shí)分支名就是個(gè)指針,會(huì)指向該分支的最新一次的commit提交

  • 查看不同commit提交的差異
    1.所有文件差異:git diff commitId1 commitId2
    2.指定文件差異:git diff commitId1 commitId2 -- 文件名1 文件名2 ...

七、暫存區(qū)相關(guān)的命令

  • 比較暫存區(qū)和head所含文件的差異(head意思是最近一次commit版本提交;也就是當(dāng)前分支的文件和最近的一次commit的文件作比較)
    git diff - -cached
    1.假設(shè)當(dāng)前版本歷史有個(gè)test.md文件
    2.此時(shí)在本地對(duì)test.md文件進(jìn)行了修改,并git add test.md到暫存區(qū)
    3.此時(shí)可以使用git diff - -cached來(lái)查看存區(qū)和head所含文件的差異

    結(jié)果

  • 比較工作區(qū)和暫存區(qū)所含文件的差異
    git diff默認(rèn)就是工作區(qū)和暫存區(qū)所含文件的差異
    1.現(xiàn)在在本地修改test.md文件和創(chuàng)建一個(gè)空白test2.md文件
    2.然后git diff查看工作區(qū)和暫存區(qū)所含文件的差異
    3.結(jié)果是test2.md文件并沒有出現(xiàn)在差異結(jié)果中,因?yàn)樗€沒歸git管理,并且還沒添加內(nèi)容(注意:git是按照文件內(nèi)容來(lái)進(jìn)行管理的,如果2個(gè)不同文件,內(nèi)容一樣,在git管理中,是一個(gè)blob文件)

    結(jié)果

  • git diff
    1.默認(rèn)情況,是查看工作區(qū)和暫存區(qū)所有包含文件的差異
    2.指定查看某些文件在工作區(qū)和暫存區(qū)的差異:git diff -- 文件名1 文件名2 ...
    3.如果需要查看head和暫存區(qū)的:git diff - -cached

八、文件恢復(fù)相關(guān)的命令reset

  • 讓暫存區(qū)恢復(fù)成和HEAD的一樣
    有時(shí)候會(huì)出現(xiàn)想要把git add到暫存區(qū)的文件,恢復(fù)成和當(dāng)前分支最新的commit版本(也就是HEAD)的一樣:git reset HEAD -- 文件名1 文件名2 ...(不寫文件名則是全部文件)

    結(jié)果

  • 讓工作區(qū)恢復(fù)成和暫存區(qū)的一樣checkout
    有時(shí)候會(huì)出現(xiàn)在本地進(jìn)行文件修改后,不想要了,想要恢復(fù)成和git add到暫存區(qū)的文件內(nèi)容一樣:git checkout -- 文件名1 文件名2 ...(不寫文件名則是全部w)

    結(jié)果

九、正確刪除文件

  • 方式1
    1.首先工作去刪除文件
    2.然后暫存區(qū)刪除文件:git rm 文件名
  • 方式2(推薦)
    git rm 文件名

十、

一部分文件在暫存區(qū)了,一部分還在工作區(qū)修改,此時(shí)有bug需要臨時(shí)進(jìn)行修復(fù)。此時(shí)可以把手頭的工作放到一個(gè)區(qū)域,等bug修復(fù)完畢后,再把工作去回復(fù)到以前的狀態(tài)。
1.先把手頭的工作放到一個(gè)區(qū)域:git stash
2.查看stash:git stash list
3.查看status:git status

步驟1-3

4-1.當(dāng)修改完bug后,再回復(fù)回去:git stash apply(把stash的文件回復(fù)到工作區(qū),但是stash中的東西不會(huì)進(jìn)行刪除)
步驟4-1

4-2.第二種方式,就是使用git stash pop(把stash中的內(nèi)容刪除,并回復(fù)到工作區(qū))
步驟4-2

11、指定不需要git管理的文件

.git同級(jí)目錄下,創(chuàng)建.gitingore文件,不同語(yǔ)言的不一樣,可參考:https://gitee.com/BattleCall/gitignore

git fetchgit pull 的區(qū)別

git fetch是將遠(yuǎn)程主機(jī)的最新內(nèi)容拉到本地,用戶在檢查了以后決定是否合并到工作本機(jī)分支中。
git pull 則是將遠(yuǎn)程主機(jī)的最新內(nèi)容拉下來(lái)后直接合并,即:git pull = git fetch + git merge,這樣可能會(huì)產(chǎn)生沖突,需要手動(dòng)解決。

12、同個(gè)分支中,不同人修改了不同的文件

1.克隆項(xiàng)目到本地:git fetch xxx
2.查看當(dāng)前項(xiàng)目本地分支和遠(yuǎn)端分支:git branch -av
3.讓本地分支和遠(yuǎn)端分支相關(guān)聯(lián)(feature分支):git checkout -b 遠(yuǎn)端分支 本地分支
4.添加修改的文件:git add xxx
5.提交文件:git commit -m "aabbcc"
ps. 如果出現(xiàn)遠(yuǎn)端項(xiàng)目的文件或內(nèi)容,比本地的多或者不一樣(沖突),那么則需要合并:git merge 遠(yuǎn)端分支

分支關(guān)聯(lián)

13、同個(gè)分支中,不同人修改了同個(gè)文件的不同區(qū)域內(nèi)容

后來(lái)者進(jìn)行push時(shí),會(huì)報(bào)錯(cuò)

沖突報(bào)錯(cuò)

  • 解決方法
    1.先f(wàn)etch:git fetch
    2.查看分支情況:git branch -av
    3.merge合并分支(共同管理的是feature分支):git merge(如果彈出個(gè)merge頁(yè)面,則代表成功了)
    4.可以cat查看下那個(gè)文件內(nèi)容,確定是否合并成功
    5.再進(jìn)行push:git push
    步驟3

14、同個(gè)分支中,不同人修改了同個(gè)文件的同個(gè)區(qū)域的內(nèi)容

1.pull本地項(xiàng)目和push遠(yuǎn)程項(xiàng)目時(shí),都會(huì)報(bào)這個(gè)文件的沖突錯(cuò)誤


沖突錯(cuò)誤
  • 解決方法1:手動(dòng)解決沖突
    1.vim 進(jìn)入沖突的文件,進(jìn)行內(nèi)容修改
    2.查看當(dāng)前狀態(tài):git status
    3.如果我們做的變更ok的,那就直接:git commit -m "解決沖突"
    4.push到遠(yuǎn)端:git push
    沖突文件內(nèi)容

    修改后的沖突文件

    status后的提示內(nèi)容

15、A變更了文件名和B變更了文件的內(nèi)容,同時(shí)commit,變更文件名的先push(成功),變更內(nèi)容的后push(報(bào)錯(cuò))

后push的報(bào)錯(cuò)
  • 解決方法
    1.git能夠主動(dòng)幫助我們解決這個(gè)問題:git pull
    2.然后查看當(dāng)前文件情況:ls -al,此時(shí)文件名和里面的內(nèi)容都已經(jīng)同步到最新的(新的文件名和新的內(nèi)容)

16、多人把同個(gè)文件的文件名修改成了不同的文件名

這種情況無(wú)法直接使用get pull解決,它會(huì)把文件都拉下來(lái),讓我們手動(dòng)解決這個(gè)情況

報(bào)錯(cuò)情況

  • 解決方法
    1.查看下狀態(tài):git status
    2.經(jīng)過協(xié)商,最終名字是index1.htm
    3.刪除最初名字的文件:git rm index.htm
    4.添加想要的文件名到暫存區(qū):git add index1.htm1
    5.刪除不想要的名字的文件:git rm index2.htm
    6.查看下狀態(tài):git status
    7.提交:git commit -m "解決沖突,文件名使用index1.html"
    8.同步到遠(yuǎn)端:git push
    status1

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

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

  • Git是什么 git目前最先進(jìn)的分布式版本控制系統(tǒng)。 使用git之前,我們先了解git的幾個(gè)概念 工作區(qū)(Work...
    釋夢(mèng)石閱讀 760評(píng)論 0 1
  • 一、Git整體理解 Git代碼管理是分布式管理方式系統(tǒng),優(yōu)點(diǎn)在于其極高的安全性和非常強(qiáng)大的分支管理。 工作區(qū)(wo...
    彭磊PL閱讀 1,072評(píng)論 0 1
  • Git常用命令 參考資料:http://www.ruanyifeng.com/blog/2015/12/git-c...
    LeoCong閱讀 529評(píng)論 0 0
  • 推薦去看“廖雪峰的官方網(wǎng)站[https://www.liaoxuefeng.com/wiki/8960434880...
    ZuYuan閱讀 477評(píng)論 0 1
  • 推薦指數(shù): 6.0 書籍主旨關(guān)鍵詞:特權(quán)、焦點(diǎn)、注意力、語(yǔ)言聯(lián)想、情景聯(lián)想 觀點(diǎn): 1.統(tǒng)計(jì)學(xué)現(xiàn)在叫數(shù)據(jù)分析,社會(huì)...
    Jenaral閱讀 5,970評(píng)論 0 5

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