【整理分享】一些git常見命令

本篇文章帶大家學習git,整理總結一些git常見命令,希望對大家有所幫助!

【整理分享】一些git常見命令

1. windows-Git 下載安裝

?官網下載地址:點擊下載

?官網下載太慢的解決方案 :??點擊下載

2 Git公鑰生成與配置方法

2.1 公鑰的用途

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

Git推薦使用SSH協議的原因?使用SSH協議可以避免每次push輸入密碼。?點擊下載開頭的就是SSH協議。 使用https協議則每次都要輸入用戶名和密碼。

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

2.2 生成公鑰

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

//?窗口尺寸設置 options?-->?windows?-->修改行數(高度)+列數(寬度) //?窗口字體設置 options?-->?text?-->設置字體大小
2.2.1 配置用戶名和郵箱

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

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

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

這里明顯應該選擇git config –global配置命令。

git?config?--global?user.name?"用戶名" git?config?--global?user.email?"郵箱地址"
2.2.2 生成密鑰

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

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

【整理分享】一些git常見命令

2.2.3 查看公鑰
?cd?~/.ssh?&&?ls ?cat?id_rsa.pub

【整理分享】一些git常見命令

2.3 配置公鑰

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

【整理分享】一些git常見命令

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

創建步驟:

2.4.1 在每個項目下,單獨配置用戶名和郵箱地址,為不同項目生成密鑰對,生成時指定私鑰名稱
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文件夾下,創建一個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是服務器的地址,User是用戶名,PreferredAuthentications是驗證方式,IdentityFile是私鑰文件路徑

3 Git倉庫創建

分為兩種情況,一種是沒有倉庫,一種是已有倉庫,先看第一種,從零創建倉庫,然后推送到遠程

3.1 從零開始創建本地庫,并推送到遠程

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

3.2 克隆已有倉庫到本地

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

git clone的本質就是把Git目錄里面的內容拷貝過來,一般Git目錄里有成千上萬的各種對象(提交對象,樹對象,二進制對象, tag對象……),如果逐一復制的話,其效率就可想而知。如果通過git、ssh協議傳輸,服務器端會在傳輸前把需要傳輸的各種對象先打好包再進行傳輸;而http(s)協議則會反復請求要傳輸的不同對象。如果倉庫里面的提交不多的話,前者和后者的效率相差不多;但若倉庫里有很多提交的話,git、ssh協議進行傳輸效率更高。不過現在Git對http(s)協議傳輸Git倉庫做了一定的優化,http(s)傳輸現在也能達到ssh協議的效率 。

4 .git目錄的組成

【整理分享】一些git常見命令

【整理分享】一些git常見命令

5 Git存儲區概念

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

【整理分享】一些git常見命令

  • 工作區:用戶編輯保存項目文件的區域,用戶直接可以接觸的地方。
  • 暫存區:保存準備提交的文件列表信息,保存在上文的.git文件夾下的index目錄中;
  • 版本庫:git 之所以快,是因為大多數提交都是對本地倉庫而言的,不依賴網絡也能進行版本管理,需要與遠程倉庫同步的時候才推送到遠程倉庫。

6 分支操作

分支是用來將特性開發絕緣開來的。在你創建倉庫的時候,master?是“默認的”分支。在其它分支上進行開發,完成后再將它們合并到主分支上。

【整理分享】一些git常見命令

6.1 查看分支

git?branch???????查看本地所有的分支 git?branch?-r????查看遠程所有分支 git?branch?-vv???查看本地分支和遠程分支的追蹤關系

6.2 切換分支

git?checkout?分支名

6.3 新建分支

git?checkout?-b??新分支名??//?從當前所處的本地分支下,創建一個新分支,分支名建議以?feature-YYYYMMDD-開發功能概述-姓名簡稱,這樣的格式命名 git?checkout?-b??新分支名??遠程主機名/遠程分支名??//?從遠程分支創建一個新分支,并追蹤遠程分支

6.4 重命名分支

git?branch?-m?舊名稱?新名稱

6.5 刪除分支

git?branch?-D?分支名?//?先切換到別的分支名下,刪除本地分支 git?push?--delete?遠程主機?遠程分支名?//?刪除遠程分支

6.6 合并分支

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

【整理分享】一些git常見命令

6.6.2 git rebase
??git?rebase?-i??[startpoint]??[endpoint]

其中-i的意思是–interactive,即彈出交互式的界面讓用戶編輯完成合并操作,[startpoint]?[endpoint]則指定了一個編輯區間,如果不指定[endpoint],則該區間的終點默認是當前分支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 ?執行shell命令(縮寫:x)
?drop ?我要丟棄該commit(縮寫:d)

根據需要編輯完之后保存即可。

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

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

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

6.7 合并分支沖突

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

$?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到=======之間的是當前分支,=======到>>>>>>>之間的是沖突分支的內容,最后面是沖突分支名

<p>id="footer"&gt;contact : <a href="https://www.php.cn/link/0179c160e5f3a90c33f35386cab23b4a" target="_blank" title="https://git-scm.com/downloads" ref="nofollow noopener noreferrer">點擊下載</a></p><pre class="brush:php;toolbar:false;">=======

id=”footer”>?please contact us at 點擊下載

&gt;&gt;&gt;&gt;&gt;&gt;&gt;?conflict-branch

合并沖突的原則是取最大公約數,共同的部分只保留一份,有差異的地方多方都保留 遇到沖突,難于解決,想回退到未合并之前的狀態,使用

git?merge?--abort

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

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

git?reset?--hard?HEAD

6.8 追蹤分支

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

git?branch?--set-upstream-to=遠程主機名/遠程分支名?本地分支名(可不寫,不寫表示當前分支)

7 設置忽略文件

7.1 創建忽略文件

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

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

7.2 忽略文件語法

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

7.3 忽略文件的原則

  • 忽略操作系統自動生成的文件,比如縮略圖等;
  • 忽略自動測試生成的報告文件,忽略代碼治療掃描結果文件;
  • 忽略帶有敏感信息的配置文件,比如存放口令的配置文件。
  • 忽略依賴安裝包,忽略包管理工具生成的錯誤文件,忽略打包目錄

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

  1. 刪除文件追蹤兩種方法
git?rm?–cached?xxx git?rm?-r?–cached
  1. 在.gitignored中添加需要過濾的文件

  2. commit, push提交.gitignore?配置這個后其他成員pull后working Directory中對應的文件會刪除,

8 工作空間操作

8.1 進度暫存

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

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

8.2 將工作區的改動添加暫存區

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

8.3 將暫存區的文件提交到本地版本庫

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

8.4?將本地版本庫推送到遠程版本庫

?git?push????: ?git?push?-f??:?//?強制推送

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

git push 如果遠程分支被省略,如上則表示將本地分支推送到與之存在追蹤關系的遠程分支(通常兩者同名),如果該遠程分支不存在,則會被新建
git push : 如果省略本地分支名,則表示刪除指定的遠程分支,因為這等同于推送一個空的本地分支到遠程分支,等同于 git push origin –delete 遠程分支
git push 如果當前分支與遠程分支存在追蹤關系,則本地分支和遠程分支都可以省略,將當前分支推送到遠程主機的對應分支
git push 如果當前分支只有一個遠程分支,那么主機名都可以省略

8.5 更新遠程版本庫的內容到本地版本庫

git?fetch??: git?pull????:??//?等于git?fetch+git?merge

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

8.6 git版本庫回滾

回退命令

git?checkout?--??#撤銷工作區修改,省略filename,就是放棄工作區所有的改動  git?log?--pretty=oneline?--abbrev-commit????#查看version_hash  git?reset?version_hash?--[soft|mixed|hard]??#本地倉庫回退到某個版本 #?--soft???????回退commit,stage和workspace仍舊保留改動 #?--mixed??????回退commit和stage,git?reset默認的模式,只有工作區保留改動 #?--hard???????回退commit?stage?workspace?所有的改動都會丟失  git?push??-f?遠程主機名?遠程分支??#強制遠程倉庫回退到本地倉庫版本

回退流程

1.備份當前分支

git?checkout?-b?the_branch_backup

2.本地倉庫版本回退

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

3.遠程倉庫回退

git?push?origin?:the_branch?//刪除遠程?the_branch

4.?用回滾后的本地分支重新建立遠程分支

git?push?origin?the_branch

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

git?branch?-D?the_branch_backup

Git的版本回退速度非常快,因為Git在內部有個指向當前版本的HEAD指針,當你回退版本的時候,Git僅僅是把HEAD從指向回退版本

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

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

git revert和git reset的區別

(1)?git reset只能針對本地操作,如果本地刪除的內容已經推送到遠程倉庫,下一次更新時,被刪除的內容會恢復。git revert可以對對遠程服務器執行回退操作。下一次更新時,本地被刪除的文件,不會恢復。

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

git revert和get reset的后悔藥

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

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

reset后后悔了怎么辦,沒有log了,怎么辦? 沒關系,用git reflog命令可以查到更多commit_id:

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

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

8.7?git?提交指定分支

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

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

現在將b2提交應用到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></hash-bn></hash-b1>

8.8 git刪除

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

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

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

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

8.9 git log

推薦兩條簡寫提交日志格式設置參數,?lm-不顯示提交記錄匯總信息 lms-會現在提交記錄匯總信息

#?提交記錄hash值是紅色?提交描述是藍色?提交日期是綠色?提交者是深藍色 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)'" #?有提交記錄匯總信息?提交記錄hash值是紅色?提交描述是藍色?提交日期是綠色?提交者是深藍色 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)'"

命令淺析:

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

看看這兩種風格的注釋是不是看著更優雅,更舒服【整理分享】一些git常見命令

【整理分享】一些git常見命令

9 Tag操作

在軟件發布時創建標簽,建一個發布版本的里程碑,是被推薦的。

9.1 tag創建

#查詢版本號 git?log?--pretty=oneline?--abbrev-commit  #創建tag git?tag?v1.0.0?1b2e1d63ff??-m?'20210123?created'  #推送某個tag到遠程倉庫 git?push?origin?tag_name  #?一次性推送所有tag到遠程服務器 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  #刪除遠程tag的命令是 git?push?origin?--delete?tag-name

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

#鏡像名稱不是隨意起的,要與docker配置名稱對應 image:?node:lts  #?要緩存的東西 cache: ??key:?${CI_COMMIT_REF_SLUG} ??paths: ????-?node_modules/ ????-?.yarn-cache/  variables: ??APP_NAME:?'alp-crm-ng'  stages: ??-?format #?預處理命令 before_script: ??-?echo?"before_script" ??-?node?-v ??-?yarn?-v ??-?yarn?install?--cache-folder?.yarn-cache  format: ??stage:?format ??script: ????-?yarn?format

11. git良好的使用習慣

  1. 每次提交前,檢查一下所提交代碼,是不是真正想修改的內容
  2. 提交的粒度要細,頻率要高,能極大減少代碼沖突和重要改動無版本存儲問題
  3. 最好打通gitlab和釘釘,企業微信機器人代碼提交通知,有人提交代碼時,可以及時通知其它人更新,減少代碼沖突的概率
  4. git的自動合并功能,有瑕疵,有時候文件的一些部分,合并是對的,一些部分,合并有沖突,最好逐個文件檢查
  5. 給項目配置husky工具,可以在提交代碼的時候,對代碼進行格式化,或者檢查是否符合lint規則,如果不符,可以終止提交
  6. 對于異常操作,一定要保留現場,查明原因,這樣記憶更深刻。
  7. 要看一下每條git命令的回顯,看看是不是你要執行的操作, 有沒有遺漏或報錯或者執行終止的情況
  8. git減少代碼沖突的做法
  • 分配任務時,盡量把任務拆分成獨立的模塊, 彼此之間的交集越少越好
  • 對于容易沖突的大文件,可以指定由一個人去修改
  • 將大文件拆分成多個子文件,將所有的子文件導入到一個index.ts索引文件中,使用的時候從索引文件中按需導出
  • 組內成員對預感會產生沖突的大文件,商量好修改順序

12. git 常見報錯

  1. Error: pathspec ‘branch-xxx’ did not match any file(s) known to git

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

  1. 修改了文件的名稱,將小寫改成大寫,提交到git遠程倉庫,發現文件名稱沒有改變,解決方法是
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?-&gt;?FETCH_HEAD ?!?[rejected]????????v1.2.0?????-&gt;?v1.2.0??(would?clobber?existing?tag)

這是因為tag被刪除了,又新建了一個一模一樣的tag,解決方案是,強制刷新一下遠程的所有tag

git?fetch?--tags?-f

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

【整理分享】一些git常見命令

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

?6. Could not retrieve the pipeline status.? —- 無法檢索流水線狀態。

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

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

原因:git工程的.git/refs目錄下跟蹤的某些git分支,在pull時候發現與遠程倉庫對應的分支refs不同,因此導致 git pull 失敗

  1. A同事$ git push -force了test這個分支,導致遠程倉庫的分支被覆蓋,而你本地的refs則會與遠程倉庫的分支不一致,產生問題;
  2. git分支是不區分大小寫,有人刪除了遠程倉庫的分支又重新創建一個同樣名字的分支同樣也會產生問題。

?解決方法:

  1. 使用git命令??git update-ref -d xxx? 刪除本地.git下的xxx文件
  2. 如果不行,強制更新 git?pull -p?強制更新

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

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

解決方法:

方法1

git?rm?--cached?filename git?push?origin?remote_branch

方法2

git?clean??-d??-fx?"src/httpTypes"

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

git?config?core.ignorecase?false

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

git?mv?readme.md?README.md
  1. 已刪除的文件,并且本地已暫存,無法在暫存狀態下復原刪除的文件,將刪除文件從暫存倉庫中移除,才能恢復刪除的文件。
  2. 錯誤: error dst refspec matches more than one? ,原因:?tags與branch中有重名的分支

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

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

【整理分享】一些git常見命令

解決方法: 從一開始創建分支時,如果要創建一個以xxx為前綴的開發名,就要創建成xxx/test1這種格式。【整理分享】一些git常見命令

更多編程相關知識,請訪問:點擊下載!!

以上就是【整理分享】一些

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享