溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

git常見命令有哪些及怎么使用

發(fā)布時間:2023-03-29 15:19:31 來源:億速云 閱讀:126 作者:iii 欄目:軟件技術(shù)

這篇文章主要講解了“git常見命令有哪些及怎么使用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“git常見命令有哪些及怎么使用”吧!

1. Windows-Git 下載安裝

2 Git公鑰生成與配置方法

2.1 公鑰的用途

許多公司的代碼倉庫及第三方代碼托管平臺,使用的都是基于公鑰的SSH認(rèn)證方式(公鑰加密,私鑰解密)。

Git推薦使用SSH協(xié)議的原因 使用SSH協(xié)議可以避免每次push輸入密碼。 git@github.com開頭的就是SSH協(xié)議。 使用Https協(xié)議則每次都要輸入用戶名和密碼。

公鑰是代碼倉庫服務(wù)器驗證本地機(jī)器的一種身份識別方式。入職一家新公司后,公司的git服務(wù)器管理員,會要求你把你的git公鑰通過郵件的方式發(fā)給它,配置好之后,以后每次向遠(yuǎn)程代碼倉庫提交代碼,就不用輸入用戶名和密碼啦。

2.2 生成公鑰

這里插一句,如果感到git bash的窗口太小或者字體太小,可以自己進(jìn)行調(diào)整。調(diào)整的方式是,打開git bash命令窗口后,在命令窗的標(biāo)題欄,鼠標(biāo)右鍵,然后選擇options,安裝下面的操作進(jìn)行設(shè)置

// 窗口尺寸設(shè)置
options --> windows -->修改行數(shù)(高度)+列數(shù)(寬度)
// 窗口字體設(shè)置
options --> text -->設(shè)置字體大小

2.2.1 配置用戶名和郵箱

在公司使用的話,用戶名建議配置成自己的真名,這樣查看代碼修改者的時候,比較好找。git config命令有三種作用域。

# 對當(dāng)前倉庫有效
git config  --local       
# 對當(dāng)前登錄者有效,對所有倉庫都有效
git config  --global    
# 對登錄這臺電腦的人都有效,對所有倉庫都有效
git config  --system

如果配置項比較多,可以在這些指令后面加 -e 參數(shù),打開配置文件進(jìn)行配置。編輯完先按esc, 然后再按shift+:組合鍵,最后在命令行輸入wq保存退出

這里明顯應(yīng)該選擇git config --global配置命令。

git config --global user.name "用戶名"
git config --global user.email "郵箱地址"

2.2.2 生成密鑰

ssh-keygen 生成秘鑰過程會有三次問詢交互。第一次是詢問生成秘鑰存儲路徑和名稱,默認(rèn)存儲位置是 /c/Users/用戶名/.ssh/id_rsa, 不想更改的話按回車鍵。第二和第三次是要求你輸入兩次私鑰密碼。用于查看秘鑰時的認(rèn)證,一次是設(shè)置密碼,一次是確認(rèn)密碼, 如果你不想在使用密鑰時輸入口令,按回車跳過即可。

ssh-keygen -t rsa -C “上一步的郵箱地址”

git常見命令有哪些及怎么使用

2.2.3 查看公鑰

 cd ~/.ssh && ls
 cat id_rsa.pub

git常見命令有哪些及怎么使用

2.3 配置公鑰

登錄個人或企業(yè)的git網(wǎng)站,在用戶設(shè)置-->SSH公鑰里面 ,給公鑰起個有意義的名稱,將生成的公鑰粘貼到公鑰輸入框里(注意要刪除公鑰末尾的空白或者換行符),點(diǎn)擊保存,就可以了。

git常見命令有哪些及怎么使用

2.4 Git管理多個SSH密鑰,Git多帳號配置

創(chuàng)建步驟:

2.4.1 在每個項目下,單獨(dú)配置用戶名和郵箱地址,為不同項目生成密鑰對,生成時指定私鑰名稱

git config --local user.name "你的名字"
git config --local user.email "你的郵箱"

ssh-keygen命令生成SSH-KEY密鑰對文件時,需要輸入文件存儲路徑,為不同賬號起不同的名稱

ssh-keygen -t rsa -C "test@126.com”

2.4.2 在~ssh文件夾下,創(chuàng)建一個config文件,配置每個賬號域名、用戶名 、 驗證方式、私鑰文件路徑

Host github.com
    HostName github.com
    User test@126.com
    PreferredAuthentications publickey
    IdentityFile /c/Users/用戶名/.ssh/ssh/id_rsa_github
Host oschina.com
    HostName oschina.com
    User test@126.com
    PreferredAuthentications publickey
    IdentityFile /c/Users/用戶名/.ssh/ssh/id_rsa_github
Host gitee.com 
  HostName gitee.com 
  User test@126.com 
  PreferredAuthentications publickey 
  IdentityFile /c/Users/用戶名/~ssh/id_rsa_gitee

HostName是服務(wù)器的地址,User是用戶名,PreferredAuthentications是驗證方式,IdentityFile是私鑰文件路徑

3 Git倉庫創(chuàng)建

分為兩種情況,一種是沒有倉庫,一種是已有倉庫,先看第一種,從零創(chuàng)建倉庫,然后推送到遠(yuǎn)程

3.1 從零開始創(chuàng)建本地庫,并推送到遠(yuǎn)程

git init 目錄名 新建一個本地倉庫
git add README.md -- 將README.md文件加入到倉庫中
git commit -m "提交描述" -- 將文件提交到本地倉庫
git remote add origin "遠(yuǎn)程倉庫地址" -- 添加遠(yuǎn)程倉庫,origin是一個遠(yuǎn)程主機(jī)的別名,名稱可以隨意取,一個遠(yuǎn)程主機(jī)上可以有多個遠(yuǎn)程倉庫
git push -u origin master -- 將本地倉庫push到遠(yuǎn)程主機(jī)origin的master分支,并將origin設(shè)為默認(rèn)遠(yuǎn)程主機(jī) -u參數(shù)設(shè)置默認(rèn)遠(yuǎn)程主機(jī),后續(xù)push代碼,不寫主機(jī)名的話,就是默認(rèn)主機(jī)

3.2 克隆已有倉庫到本地

git clone /path/to/repository                                                             // 克隆本地庫
git clone  git/ssh/http[s]/ftp[s]/file/rsync:username@ip/path/to/repository               // 克隆遠(yuǎn)端庫

git clone的本質(zhì)就是把Git目錄里面的內(nèi)容拷貝過來,一般Git目錄里有成千上萬的各種對象(提交對象,樹對象,二進(jìn)制對象, tag對象......),如果逐一復(fù)制的話,其效率就可想而知。如果通過git、ssh協(xié)議傳輸,服務(wù)器端會在傳輸前把需要傳輸?shù)母鞣N對象先打好包再進(jìn)行傳輸;而http(s)協(xié)議則會反復(fù)請求要傳輸?shù)牟煌瑢ο?。如果倉庫里面的提交不多的話,前者和后者的效率相差不多;但若倉庫里有很多提交的話,git、ssh協(xié)議進(jìn)行傳輸效率更高。不過現(xiàn)在Git對http(s)協(xié)議傳輸Git倉庫做了一定的優(yōu)化,http(s)傳輸現(xiàn)在也能達(dá)到ssh協(xié)議的效率 。

4 .git目錄的組成

git常見命令有哪些及怎么使用

5 Git存儲區(qū)概念

如果你不清楚git add ,git commit ,git push都做了什么,那可能是因為你不知道git倉庫存儲區(qū)管理方式。git將本地的代碼保存分為三個存儲空間。

  • 工作區(qū):用戶編輯保存項目文件的區(qū)域,用戶直接可以接觸的地方。

  • 暫存區(qū):保存準(zhǔn)備提交的文件列表信息,保存在上文的.git文件夾下的index目錄中;

  • 版本庫:git 之所以快,是因為大多數(shù)提交都是對本地倉庫而言的,不依賴網(wǎng)絡(luò)也能進(jìn)行版本管理,需要與遠(yuǎn)程倉庫同步的時候才推送到遠(yuǎn)程倉庫。

6 分支操作

分支是用來將特性開發(fā)絕緣開來的。在你創(chuàng)建倉庫的時候,master 是“默認(rèn)的”分支。在其它分支上進(jìn)行開發(fā),完成后再將它們合并到主分支上。

git常見命令有哪些及怎么使用

6.1 查看分支

git branch       查看本地所有的分支
git branch -r    查看遠(yuǎn)程所有分支
git branch -vv   查看本地分支和遠(yuǎn)程分支的追蹤關(guān)系

6.2 切換分支

git checkout 分支名

6.3 新建分支

git checkout -b  新分支名  // 從當(dāng)前所處的本地分支下,創(chuàng)建一個新分支,分支名建議以 feature-YYYYMMDD-開發(fā)功能概述-姓名簡稱,這樣的格式命名
git checkout -b  新分支名  遠(yuǎn)程主機(jī)名/遠(yuǎn)程分支名  // 從遠(yuǎn)程分支創(chuàng)建一個新分支,并追蹤遠(yuǎn)程分支

6.4 重命名分支

git branch -m 舊名稱 新名稱

6.5 刪除分支

git branch -D 分支名 // 先切換到別的分支名下,刪除本地分支
git push --delete 遠(yuǎn)程主機(jī) 遠(yuǎn)程分支名 // 刪除遠(yuǎn)程分支

6.6 合并分支
6.6.1 git merge

git merge 當(dāng)前分支要合并的分支名 -m '合并備注'
git merge --no-ff  當(dāng)前分支要合并的分支名 // 保留分支合并之前的歷史提交記錄
git merge --squash 當(dāng)前分支要合并的分支名 // 將分支合并之前多次提交記錄合并為一次

git常見命令有哪些及怎么使用

6.6.2 git rebase

  git rebase -i  [startpoint]  [endpoint]

其中-i的意思是--interactive,即彈出交互式的界面讓用戶編輯完成合并操作,[startpoint] [endpoint]則指定了一個編輯區(qū)間,如果不指定[endpoint],則該區(qū)間的終點(diǎn)默認(rèn)是當(dāng)前分支HEAD所指向的commit

以合并最近三次的提交記錄為例:

git rebase -i HEAD~3

彈出如下界面:

git常見命令有哪些及怎么使用

上面未被注釋的部分列出的是我們本次rebase操作包含的所有提交,下面注釋部分是git為我們提供的命令說明。每一個commit id 前面的pick表示指令類型,git 為我們提供了以下幾個命令:

命令說明
pick保留該commit(縮寫:p)
reword保留該commit,但我需要修改該commit的注釋(縮寫:r)
edit保留該commit, 但我要停下來修改該提交(不僅僅修改注釋)(縮寫:e)
squash將該commit和前一個commit合并(縮寫:s)
fixup將該commit和前一個commit合并,但我不要保留該提交的注釋信息(縮寫:f)
exec執(zhí)行shell命令(縮寫:x)
drop我要丟棄該commit(縮寫:d)

根據(jù)需要編輯完之后保存即可。

6.6.3 git merge和git rebase 合并分支的差異

git rebase生成的歷史記錄線比較好看,merge比rebase有更多的歷史記錄,一方認(rèn)為,合并分支不能僅僅為了好看,而要記錄某個分支完整開發(fā)歷史,一根直線的歷史,很難分辨出開發(fā)歷程和工作分配,如果開發(fā)過程跌跌撞撞,要進(jìn)行如實記錄,遍于后期改進(jìn)。

另一方認(rèn)為,在開發(fā)過程中,如果某個分支功能比較多, commit量比較多時,使用rebase可以將當(dāng)前分支提交記錄整理過后再合并回主干,這樣主干的演變軌跡線會看著比較美觀,比較清晰。如果項目成員對git用得比較熟練,建議使用git rebase,否則建議使用git merge,便于查看提交歷史。

6.7 合并分支沖突

沖突的原因是兩個不同的開發(fā)者改了相同文件相同位置的代碼,沖突提示,

$ git merge conflict-branch  

Auto-merging index.html

CONFLICT (content): Merge conflict in index.html

Automatic merge failed; fix conflicts and then commit the result.

文件沖突,HEAD到=======之間的是當(dāng)前分支,=======到>>>>>>>之間的是沖突分支的內(nèi)容,最后面是沖突分支名

<<<<<<< HEAD

id="footer">contact : email.support@github.com

=======

id="footer"> please contact us at support@github.com

>>>>>>> conflict-branch

合并沖突的原則是取最大公約數(shù),共同的部分只保留一份,有差異的地方多方都保留 遇到?jīng)_突,難于解決,想回退到未合并之前的狀態(tài),使用

git merge --abort

解決完沖突文件之后,要重新添加文件到暫存區(qū)和本地版本庫。

另外一種場景是git pull最新的代碼后,git stash pop引起沖突,想回退到最新沒沖突之前的代碼,使用指令

git reset --hard HEAD

6.8 追蹤分支

追蹤分支主要用來對比當(dāng)前和遠(yuǎn)程分支的版本, 比如說origin/master分支比master多提交了兩次,意味著你需要將origin/master的分支更新到master。

git branch --set-upstream-to=遠(yuǎn)程主機(jī)名/遠(yuǎn)程分支名 本地分支名(可不寫,不寫表示當(dāng)前分支)

7 設(shè)置忽略文件

7.1 創(chuàng)建忽略文件

在倉庫根目錄下新建.gitignore文件,文件名不可更改。在Win系統(tǒng)下,不允許新建以.開頭的文件或文件夾,因此需要在Git Bash中新建,命令如下:

cd 本地代碼倉庫目錄
vim .gitignore

7.2 忽略文件語法

# 以#開頭的行都是注釋
# 忽略*.o和*.a文件(常見的編譯過程中產(chǎn)生的文件)
 *.[oa]
# 忽略*.c和*.C文件,somefile.c除外,!用于在在某規(guī)則之后增加例外
*.[cC]
!somefile.c
# 忽略somepath文件和somepath目錄
somepath
# 只忽略somepath目錄,不忽略somepath文件 
somepath/ # 只忽略somepath文件,不忽略somepath目錄 
somepath 
!somepath/ 
# 只忽略當(dāng)前目錄下的somepath文件和目錄,子目錄的somepath不在忽略范圍內(nèi) 
/somepath

7.3 忽略文件的原則

  • 忽略操作系統(tǒng)自動生成的文件,比如縮略圖等;

  • 忽略自動測試生成的報告文件,忽略代碼治療掃描結(jié)果文件;

  • 忽略帶有敏感信息的配置文件,比如存放口令的配置文件。

  • 忽略依賴安裝包,忽略包管理工具生成的錯誤文件,忽略打包目錄

7.4 忽略已經(jīng)添加到遠(yuǎn)程倉庫的文件 ( 如果文件重要,要提前備份)

  1. 刪除文件追蹤兩種方法

git rm –cached xxx
git rm -r –cached

  1. 在.gitignored中添加需要過濾的文件

  2. commit, push提交.gitignore 配置這個后其他成員pull后working directory中對應(yīng)的文件會刪除,

8 工作空間操作

8.1 進(jìn)度暫存

git 切換分支時,如果當(dāng)前分支的功能沒有開發(fā)好,不具備提交的條件, 如果不對這些內(nèi)容做暫存處理,會被帶入到切換之后的分支,給代碼管理帶來不必要的麻煩。這時就需要對尚未開發(fā)完成的進(jìn)度進(jìn)行存儲操作。

git stash save "備注說明"    // 暫存尚未開發(fā)完成的進(jìn)度
git stash list              // 查看暫存進(jìn)度
git stash pop stash@{1}     // 恢復(fù)指定進(jìn)度到工作區(qū),stash_id是通過git stash list命令得到的,如果不指定,恢復(fù)最新的進(jìn)度到工作區(qū)
git stash drop [stash_id]   // 如果不指定stash_id,則默認(rèn)刪除最新的存儲進(jìn)度。
git stash clear             // 刪除所有暫存內(nèi)容

8.2 將工作區(qū)的改動添加暫存區(qū)

git add dir1          # 添加dir1這個目錄,目錄下的所有文件都被加入 
git add f1 f2         # 添加f1,f2文件 
git add -u            # -u是update的縮寫,只監(jiān)聽已經(jīng)被加入的文件,包括修改和刪除,不包括新增的文件和.gitignore中設(shè)置的忽略文件 添加到暫存區(qū) 
git add .             # 監(jiān)聽工作區(qū)的狀態(tài)樹,把工作區(qū)狀態(tài)樹的所有變化提交到暫存區(qū), 包括新增的和修改的,不包括刪除的文件和.gitignore中設(shè)置的忽略文件
git add -A            # 等于 git add . + git add -u 不包括.gitignore中要忽略的文件
git add *             # 等同git add -A

8.3 將暫存區(qū)的文件提交到本地版本庫

git commit -m    "代碼提交信息"
git commit -a -m "代碼提交信息"      # -a是把unstaged的文件變成staged(不包括新建的文件),然后commit
git commit --amend                 # 修改提交的commit(沒有push)
git commit --amend -m "comment"    # 修改commit注釋

8.4 將本地版本庫推送到遠(yuǎn)程版本庫

 git push   <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名>
 git push -f <遠(yuǎn)程主機(jī)名> <本地分支名>:<遠(yuǎn)程分支名> // 強(qiáng)制推送

git push命令使用時常見的四種情況:

git push <遠(yuǎn)程主機(jī)名> <本地分支名>如果遠(yuǎn)程分支被省略,如上則表示將本地分支推送到與之存在追蹤關(guān)系的遠(yuǎn)程分支(通常兩者同名),如果該遠(yuǎn)程分支不存在,則會被新建
git push <遠(yuǎn)程主機(jī)名> :<遠(yuǎn)程分支名>如果省略本地分支名,則表示刪除指定的遠(yuǎn)程分支,因為這等同于推送一個空的本地分支到遠(yuǎn)程分支,等同于 git push origin --delete 遠(yuǎn)程分支
git push <遠(yuǎn)程主機(jī)名>如果當(dāng)前分支與遠(yuǎn)程分支存在追蹤關(guān)系,則本地分支和遠(yuǎn)程分支都可以省略,將當(dāng)前分支推送到遠(yuǎn)程主機(jī)的對應(yīng)分支
git push如果當(dāng)前分支只有一個遠(yuǎn)程分支,那么主機(jī)名都可以省略
8.5 更新遠(yuǎn)程版本庫的內(nèi)容到本地版本庫

git fetch <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>
git pull   <遠(yuǎn)程主機(jī)名> <遠(yuǎn)程分支名>:<本地分支名>  // 等于git fetch+git merge

git pull 常見的四種省略參數(shù)的情況,與git push比較類似。這里就不再贅述。git pull除了更新和自動合并當(dāng)前代碼之外,還有更新倉庫所有分支的功能,注意是更新分支,不是更新分支上的代碼。

8.6 git版本庫回滾

回退命令

git checkout --  #撤銷工作區(qū)修改,省略filename,就是放棄工作區(qū)所有的改動

git log --pretty=oneline --abbrev-commit    #查看version_hash

git reset version_hash --[soft|mixed|hard]  #本地倉庫回退到某個版本
# --soft       回退commit,stage和workspace仍舊保留改動
# --mixed      回退commit和stage,git reset默認(rèn)的模式,只有工作區(qū)保留改動
# --hard       回退commit stage workspace 所有的改動都會丟失

git push  -f 遠(yuǎn)程主機(jī)名 遠(yuǎn)程分支  #強(qiáng)制遠(yuǎn)程倉庫回退到本地倉庫版本

回退流程

1.備份當(dāng)前分支

git checkout -b the_branch_backup

2.本地倉庫版本回退

git log --pretty=oneline --abbrev-commit #查看回退版本號
git reset --hard the_commit_id #本地倉庫版本回退

3.遠(yuǎn)程倉庫回退

git push origin :the_branch //刪除遠(yuǎn)程 the_branch

4. 用回滾后的本地分支重新建立遠(yuǎn)程分支

git push origin the_branch

5.回退成功,刪除本地備份分支

git branch -D the_branch_backup

Git的版本回退速度非???,因為Git在內(nèi)部有個指向當(dāng)前版本的HEAD指針,當(dāng)你回退版本的時候,Git僅僅是把HEAD從指向回退版本

提交代碼時提交錯了分支的處理方法

git log --pretty=oneline --abbrev-commit   #查看 提交之前的commit_id
git reset commit_id                        #本地版本庫回退
git stash                                  #暫存工作區(qū)和暫存區(qū)改動
git checkout target_branch                 #切換到正確的分支
git stash pop                              #恢復(fù)代碼
git add -A && git commit - m '備注'

git revert和git reset的區(qū)別

(1) git reset只能針對本地操作,如果本地刪除的內(nèi)容已經(jīng)推送到遠(yuǎn)程倉庫,下一次更新時,被刪除的內(nèi)容會恢復(fù)。git revert可以對對遠(yuǎn)程服務(wù)器執(zhí)行回退操作。下一次更新時,本地被刪除的文件,不會恢復(fù)。

(2) git revert會使提交記錄增多,git revert是撤銷指定版本的提交,會產(chǎn)生一個新的提交記錄,git reset會使提交記錄減少,git reset是回卷,會撤銷指定版本之后的所有提交記錄

git revert和get reset的后悔藥

revert后如果不想撤銷了,看一下log,reset就可以回去了。

git log                         # 查看commit_id
git reset --hard commit_d       # 回退本地倉庫,暫存區(qū),工作區(qū)

reset后后悔了怎么辦,沒有l(wèi)og了,怎么辦? 沒關(guān)系,用git reflog命令可以查到更多commit_id:

git reflog                       # 查看所有的命令操作記錄,可以查詢到git reset之前的commit_id
git reset --hard commit_id       # 就可以回退會reset以前狀態(tài)了。

在git中,總是有后悔藥可以吃的,git reflog  記錄你操作的每一條指令,HEAD指向的版本是當(dāng)前版本,Git允許我們使用命令git reset --hard commit_id在歷史版本之間穿梭。穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個版本。要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本。

8.7 git 提交指定分支

git cherry-pick命令的作用,就是在當(dāng)前分支上,把其它分支的提交記錄合并過來,這在兩個版本剛開始說要一起上線,后來一個版本不上線了,而代碼都攪合在發(fā)布分支,要撤銷不上線的代碼時,配合git reset指令,可以輕松實現(xiàn)發(fā)布分支不上線功能的代碼下撤。

 a1 - a2 - a3 - a4       A
         \
           b1 - b2 - b3  B

現(xiàn)在將b2提交應(yīng)用到A分支。

# 切換到 A 分支$ git checkout A# Cherry pick 操作$ git cherry-pick b2

操作完成以后,代碼庫就變成:

 a1 - a2 - a3 - a4 - b2     A
         \
           b1 - b2 - b3     B

合并多個提交的操作指令是:

git cherry-pick <Hash-b1> <Hash-bN>

8.8 git刪除

當(dāng)我們需要刪除暫存區(qū)或版本庫上的文件, 同時工作區(qū)也不需要這個文件了, 可以使用git rm

git rm file_path
git commit -m 'delete somefile'
git push

當(dāng)我們需要刪除暫存區(qū)或版本庫的文件, 但本地又需要使用, 只是不希望這個文件被版本控制, 可以使用 git rm --cached

git rm --cached file_path
git commit -m 'delete remote somefile'
git push

8.9 git log

推薦兩條簡寫提交日志格式設(shè)置參數(shù), lm-不顯示提交記錄匯總信息 lms-會現(xiàn)在提交記錄匯總信息

# 提交記錄hash值是紅色 提交描述是藍(lán)色 提交日期是綠色 提交者是深藍(lán)色
git config --global alias.lm   "log --no-merges --color --date=format:'%Y-%m-%d %H:%M:%S'  --pretty=format:'%Cred%h %Creset- %Cblue%s %Cgreen(%cd) %C(bold blue)<%an>'"
# 有提交記錄匯總信息 提交記錄hash值是紅色 提交描述是藍(lán)色 提交日期是綠色 提交者是深藍(lán)色
git config --global alias.lms  "log --no-merges --color --stat --date=format:'%Y-%m-%d %H:%M:%S'  --pretty=format:'%Cred%h %Creset- %Cblue%s %Cgreen(%cd) %C(bold blue)<%an>'"

命令淺析:

--no-merges:不顯示分支合并日志
%h:簡短hash提交字符串
%cd:提交日期
%an:提交者
%s:提交說明
%C+顏色值+內(nèi)容=給內(nèi)容設(shè)置相應(yīng)的顏色

看看這兩種風(fēng)格的注釋是不是看著更優(yōu)雅,更舒服

git常見命令有哪些及怎么使用

9 Tag操作

在軟件發(fā)布時創(chuàng)建標(biāo)簽,建一個發(fā)布版本的里程碑,是被推薦的。

9.1 tag創(chuàng)建

#查詢版本號
git log --pretty=oneline --abbrev-commit

#創(chuàng)建tag
git tag v1.0.0 1b2e1d63ff  -m '20210123 created'

#推送某個tag到遠(yuǎn)程倉庫
git push origin tag_name

# 一次性推送所有tag到遠(yuǎn)程服務(wù)器
git push origin --tags

9.2 查看tag

# 查看某個tag記錄
git show tag-name

# 查看所有的tag
git tag -ln  # 加-ln,查看tag簡略信息

9.3 使用tag

// 取出打過tag的某個版本
 git checkout -b branch_name tag_name

9.4 刪除tag

#刪除本地的tag命令是
git tag -d tag-name

#刪除遠(yuǎn)程tag的命令是
git push origin --delete tag-name

10. .gitlab-ci.yml配置參考示例

#鏡像名稱不是隨意起的,要與docker配置名稱對應(yīng)
image: node:lts

# 要緩存的東西
cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
    - node_modules/
    - .yarn-cache/

variables:
  APP_NAME: 'alp-crm-ng'

stages:
  - format
# 預(yù)處理命令
before_script:
  - echo "before_script"
  - node -v
  - yarn -v
  - yarn install --cache-folder .yarn-cache

format:
  stage: format
  script:
    - yarn format

11. git良好的使用習(xí)慣

  1. 每次提交前,檢查一下所提交代碼,是不是真正想修改的內(nèi)容

  2. 提交的粒度要細(xì),頻率要高,能極大減少代碼沖突和重要改動無版本存儲問題

  3. 最好打通gitlab和釘釘,企業(yè)微信機(jī)器人代碼提交通知,有人提交代碼時,可以及時通知其它人更新,減少代碼沖突的概率

  4. git的自動合并功能,有瑕疵,有時候文件的一些部分,合并是對的,一些部分,合并有沖突,最好逐個文件檢查

  5. 給項目配置husky工具,可以在提交代碼的時候,對代碼進(jìn)行格式化,或者檢查是否符合lint規(guī)則,如果不符,可以終止提交

  6. 對于異常操作,一定要保留現(xiàn)場,查明原因,這樣記憶更深刻。

  7. 要看一下每條git命令的回顯,看看是不是你要執(zhí)行的操作, 有沒有遺漏或報錯或者執(zhí)行終止的情況

  8. git減少代碼沖突的做法

  • 分配任務(wù)時,盡量把任務(wù)拆分成獨(dú)立的模塊, 彼此之間的交集越少越好

  • 對于容易沖突的大文件,可以指定由一個人去修改

  • 將大文件拆分成多個子文件,將所有的子文件導(dǎo)入到一個index.ts索引文件中,使用的時候從索引文件中按需導(dǎo)出

  • 組內(nèi)成員對預(yù)感會產(chǎn)生沖突的大文件,商量好修改順序

12. git 常見報錯

  1. error: pathspec 'branch-xxx' did not match any file(s) known to git

git checkout 的分支不存在.git文件夾引起的

  1. 修改了文件的名稱,將小寫改成大寫,提交到git遠(yuǎn)程倉庫,發(fā)現(xiàn)文件名稱沒有改變,解決方法是

git rm -r --cached .

3. 合并代碼,推薦用如下命令,比git merge更好用。

git pull origin remote_need_merge_branch_name

  1. 在VSCode的git命令窗口提交代碼時,報如下錯誤:

 git pull --tags origin hotfix/20210707-hide-fund-rate
From gitlab.tengmoney.com:tengmoney-fe/caizhi-minipro-cscb
 * branch            hotfix/20210707-hide-fund-rate -> FETCH_HEAD
 ! [rejected]        v1.2.0     -> v1.2.0  (would clobber existing tag)

這是因為tag被刪除了,又新建了一個一模一樣的tag,解決方案是,強(qiáng)制刷新一下遠(yuǎn)程的所有tag

git fetch --tags -f

5. .gitignore文件中設(shè)置的忽略文件不生效的解決方法,.gitignore中設(shè)置的忽略規(guī)則,是針對未添加到版本管理的文件而言,對已添加到版本庫的文件不生效。解決方法是將所有文件先從版本庫刪除,再重新添加一遍。

git常見命令有哪些及怎么使用

git rm  --cached 要刪除的xxx文件夾或文件

6. Could not retrieve the pipeline status.  ---- 無法檢索流水線狀態(tài)。

這種報錯是因為沒有流水線文件所致。

  1. error: cannot lock ref ‘xxx’: ‘xxx’ exists; cannot create ‘xxx’

原因:git工程的.git/refs目錄下跟蹤的某些git分支,在pull時候發(fā)現(xiàn)與遠(yuǎn)程倉庫對應(yīng)的分支refs不同,因此導(dǎo)致 git pull 失敗

  1. A同事$ git push -force了test這個分支,導(dǎo)致遠(yuǎn)程倉庫的分支被覆蓋,而你本地的refs則會與遠(yuǎn)程倉庫的分支不一致,產(chǎn)生問題;

  2. git分支是不區(qū)分大小寫,有人刪除了遠(yuǎn)程倉庫的分支又重新創(chuàng)建一個同樣名字的分支同樣也會產(chǎn)生問題。

解決方法:

  1. 使用git命令 git update-ref -d xxx  刪除本地.git下的xxx文件

  2. 如果不行,強(qiáng)制更新 git pull -p 強(qiáng)制更新

8. The following untracked working tree files would be overwritten by merge,

原因: 遠(yuǎn)端將某個文件加入了倉庫,本地把這個文件從倉庫中移除了,就會出現(xiàn)這樣的提示。一般是同名文件,剛開始命名不規(guī)范,比如說文件名首字母大寫,后面改成了小寫文件。window系統(tǒng)不區(qū)分文件大小寫,就出現(xiàn)這個問題。

解決方法:

方法1

git rm --cached filename
git push origin remote_branch

方法2

git clean  -d  -fx "src/httpTypes"

其中  d----刪除未被添加到git的路徑中的文件   x---刪除忽略文件  對git來說不識別的文件   f ---強(qiáng)制運(yùn)行 ,強(qiáng)制合并的思路走不通。
9. git默認(rèn)對文件名稱大小寫不敏感,如果將原來小駝峰命名的文件改成了大駝峰,會發(fā)現(xiàn)本地git的改動文件提示,沒有任何修改。解決方法就是執(zhí)行

git config core.ignorecase false

刪除之前小駝峰文件的操作指令是

git mv readme.md README.md

  1. 已刪除的文件,并且本地已暫存,無法在暫存狀態(tài)下復(fù)原刪除的文件,將刪除文件從暫存?zhèn)}庫中移除,才能恢復(fù)刪除的文件。

  2. 錯誤: error dst refspec matches more than one  ,原因: tags與branch中有重名的分支

解決方法:刪除重名分支 12. git checkout -b 創(chuàng)建新分支時,報fatal: cannot lock ref xxx

git 把分支信息存放在 .git/refs/heads 目錄中,每個分支是一個文件。如果.git/refs/heads下存在同名目錄,就會報這個錯誤。

git常見命令有哪些及怎么使用

解決方法: 從一開始創(chuàng)建分支時,如果要創(chuàng)建一個以xxx為前綴的開發(fā)名,就要創(chuàng)建成xxx/test1這種格式。

感謝各位的閱讀,以上就是“git常見命令有哪些及怎么使用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對git常見命令有哪些及怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

git
AI