這篇文章主要講解了“git常見命令有哪些及怎么使用”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“git常見命令有哪些及怎么使用”吧!
創(chuàng)新互聯(lián)是一家專業(yè)提供八宿企業(yè)網(wǎng)站建設,專注與網(wǎng)站建設、做網(wǎng)站、HTML5、小程序制作等業(yè)務。10年已為八宿眾多企業(yè)、政府機構(gòu)等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進行中。
許多公司的代碼倉庫及第三方代碼托管平臺,使用的都是基于公鑰的SSH認證方式(公鑰加密,私鑰解密)。
Git推薦使用SSH協(xié)議的原因 使用SSH協(xié)議可以避免每次push
輸入密碼。 git@github.com開頭的就是SSH協(xié)議。 使用Https協(xié)議則每次都要輸入用戶名和密碼。
公鑰是代碼倉庫服務器驗證本地機器的一種身份識別方式。入職一家新公司后,公司的git服務器管理員,會要求你把你的git公鑰通過郵件的方式發(fā)給它,配置好之后,以后每次向遠程代碼倉庫提交代碼,就不用輸入用戶名和密碼啦。
這里插一句,如果感到git bash的窗口太小或者字體太小,可以自己進行調(diào)整。調(diào)整的方式是,打開git bash命令窗口后,在命令窗的標題欄,鼠標右鍵,然后選擇options,安裝下面的操作進行設置
// 窗口尺寸設置
options --> windows -->修改行數(shù)(高度)+列數(shù)(寬度)
// 窗口字體設置
options --> text -->設置字體大小
在公司使用的話,用戶名建議配置成自己的真名,這樣查看代碼修改者的時候,比較好找。git config命令有三種作用域。
# 對當前倉庫有效
git config --local
# 對當前登錄者有效,對所有倉庫都有效
git config --global
# 對登錄這臺電腦的人都有效,對所有倉庫都有效
git config --system
如果配置項比較多,可以在這些指令后面加 -e 參數(shù),打開配置文件進行配置。編輯完先按esc, 然后再按shift+:組合鍵,最后在命令行輸入wq保存退出
這里明顯應該選擇git config --global配置命令。
git config --global user.name "用戶名"
git config --global user.email "郵箱地址"
ssh-keygen
生成秘鑰過程會有三次問詢交互。第一次是詢問生成秘鑰存儲路徑和名稱,默認存儲位置是 /c/Users/用戶名/.ssh/id_rsa
, 不想更改的話按回車鍵。第二和第三次是要求你輸入兩次私鑰密碼。用于查看秘鑰時的認證,一次是設置密碼,一次是確認密碼, 如果你不想在使用密鑰時輸入口令,按回車跳過即可。
ssh-keygen -t rsa -C “上一步的郵箱地址”
cd ~/.ssh && ls
cat id_rsa.pub
登錄個人或企業(yè)的git網(wǎng)站,在用戶設置-->SSH公鑰里面 ,給公鑰起個有意義的名稱,將生成的公鑰粘貼到公鑰輸入框里(注意要刪除公鑰末尾的空白或者換行符),點擊保存,就可以了。
創(chuàng)建步驟:
git config --local user.name "你的名字"
git config --local user.email "你的郵箱"
ssh-keygen命令生成SSH-KEY密鑰對文件時,需要輸入文件存儲路徑,為不同賬號起不同的名稱
ssh-keygen -t rsa -C "test@126.com”
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是私鑰文件路徑
分為兩種情況,一種是沒有倉庫,一種是已有倉庫,先看第一種,從零創(chuàng)建倉庫,然后推送到遠程
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參數(shù)設置默認遠程主機,后續(xù)push代碼,不寫主機名的話,就是默認主機
git clone /path/to/repository // 克隆本地庫
git clone git/ssh/http[s]/ftp[s]/file/rsync:username@ip/path/to/repository // 克隆遠端庫
git clone的本質(zhì)就是把Git目錄里面的內(nèi)容拷貝過來,一般Git目錄里有成千上萬的各種對象(提交對象,樹對象,二進制對象, tag對象......),如果逐一復制的話,其效率就可想而知。如果通過git、ssh協(xié)議傳輸,服務器端會在傳輸前把需要傳輸?shù)母鞣N對象先打好包再進行傳輸;而http(s)協(xié)議則會反復請求要傳輸?shù)牟煌瑢ο?。如果倉庫里面的提交不多的話,前者和后者的效率相差不多;但若倉庫里有很多提交的話,git、ssh協(xié)議進行傳輸效率更高。不過現(xiàn)在Git對http(s)協(xié)議傳輸Git倉庫做了一定的優(yōu)化,http(s)傳輸現(xiàn)在也能達到ssh協(xié)議的效率 。
如果你不清楚git add ,git commit ,git push都做了什么,那可能是因為你不知道git倉庫存儲區(qū)管理方式。git將本地的代碼保存分為三個存儲空間。
工作區(qū):用戶編輯保存項目文件的區(qū)域,用戶直接可以接觸的地方。
暫存區(qū):保存準備提交的文件列表信息,保存在上文的.git文件夾下的index目錄中;
版本庫:git 之所以快,是因為大多數(shù)提交都是對本地倉庫而言的,不依賴網(wǎng)絡也能進行版本管理,需要與遠程倉庫同步的時候才推送到遠程倉庫。
分支是用來將特性開發(fā)絕緣開來的。在你創(chuàng)建倉庫的時候,master 是“默認的”分支。在其它分支上進行開發(fā),完成后再將它們合并到主分支上。
git branch 查看本地所有的分支
git branch -r 查看遠程所有分支
git branch -vv 查看本地分支和遠程分支的追蹤關(guān)系
git checkout 分支名
git checkout -b 新分支名 // 從當前所處的本地分支下,創(chuàng)建一個新分支,分支名建議以 feature-YYYYMMDD-開發(fā)功能概述-姓名簡稱,這樣的格式命名
git checkout -b 新分支名 遠程主機名/遠程分支名 // 從遠程分支創(chuàng)建一個新分支,并追蹤遠程分支
git branch -m 舊名稱 新名稱
git branch -D 分支名 // 先切換到別的分支名下,刪除本地分支
git push --delete 遠程主機 遠程分支名 // 刪除遠程分支
git merge 當前分支要合并的分支名 -m '合并備注'
git merge --no-ff 當前分支要合并的分支名 // 保留分支合并之前的歷史提交記錄
git merge --squash 當前分支要合并的分支名 // 將分支合并之前多次提交記錄合并為一次
git rebase -i [startpoint] [endpoint]
其中-i
的意思是--interactive
,即彈出交互式的界面讓用戶編輯完成合并操作,[startpoint]
[endpoint]
則指定了一個編輯區(qū)間,如果不指定[endpoint]
,則該區(qū)間的終點默認是當前分支HEAD
所指向的commit
以合并最近三次的提交記錄為例:
git rebase -i HEAD~3
彈出如下界面:
上面未被注釋的部分列出的是我們本次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ù)需要編輯完之后保存即可。
git rebase生成的歷史記錄線比較好看,merge比rebase有更多的歷史記錄,一方認為,合并分支不能僅僅為了好看,而要記錄某個分支完整開發(fā)歷史,一根直線的歷史,很難分辨出開發(fā)歷程和工作分配,如果開發(fā)過程跌跌撞撞,要進行如實記錄,遍于后期改進。
另一方認為,在開發(fā)過程中,如果某個分支功能比較多, commit量比較多時,使用rebase可以將當前分支提交記錄整理過后再合并回主干,這樣主干的演變軌跡線會看著比較美觀,比較清晰。如果項目成員對git用得比較熟練,建議使用git rebase,否則建議使用git merge,便于查看提交歷史。
沖突的原因是兩個不同的開發(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到=======之間的是當前分支,=======到>>>>>>>之間的是沖突分支的內(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
追蹤分支主要用來對比當前和遠程分支的版本, 比如說origin/master分支比master多提交了兩次,意味著你需要將origin/master的分支更新到master。
git branch --set-upstream-to=遠程主機名/遠程分支名 本地分支名(可不寫,不寫表示當前分支)
在倉庫根目錄下新建.gitignore
文件,文件名不可更改。在Win系統(tǒng)下,不允許新建以.
開頭的文件或文件夾,因此需要在Git Bash中新建,命令如下:
cd 本地代碼倉庫目錄
vim .gitignore
# 以#開頭的行都是注釋
# 忽略*.o和*.a文件(常見的編譯過程中產(chǎn)生的文件)
*.[oa]
# 忽略*.c和*.C文件,somefile.c除外,!用于在在某規(guī)則之后增加例外
*.[cC]
!somefile.c
# 忽略somepath文件和somepath目錄
somepath
# 只忽略somepath目錄,不忽略somepath文件
somepath/ # 只忽略somepath文件,不忽略somepath目錄
somepath
!somepath/
# 只忽略當前目錄下的somepath文件和目錄,子目錄的somepath不在忽略范圍內(nèi)
/somepath
7.3 忽略文件的原則
忽略操作系統(tǒng)自動生成的文件,比如縮略圖等;
忽略自動測試生成的報告文件,忽略代碼治療掃描結(jié)果文件;
忽略帶有敏感信息的配置文件,比如存放口令的配置文件。
忽略依賴安裝包,忽略包管理工具生成的錯誤文件,忽略打包目錄
7.4 忽略已經(jīng)添加到遠程倉庫的文件 (如果文件重要,要提前備份)
刪除文件追蹤兩種方法
git rm –cached xxx
git rm -r –cached
在.gitignored中添加需要過濾的文件
commit, push提交.gitignore 配置這個后其他成員pull后working directory中對應的文件會刪除,
git 切換分支時,如果當前分支的功能沒有開發(fā)好,不具備提交的條件, 如果不對這些內(nèi)容做暫存處理,會被帶入到切換之后的分支,給代碼管理帶來不必要的麻煩。這時就需要對尚未開發(fā)完成的進度進行存儲操作。
git stash save "備注說明" // 暫存尚未開發(fā)完成的進度
git stash list // 查看暫存進度
git stash pop stash@{1} // 恢復指定進度到工作區(qū),stash_id是通過git stash list命令得到的,如果不指定,恢復最新的進度到工作區(qū)
git stash drop [stash_id] // 如果不指定stash_id,則默認刪除最新的存儲進度。
git stash clear // 刪除所有暫存內(nèi)容
git add dir1 # 添加dir1這個目錄,目錄下的所有文件都被加入
git add f1 f2 # 添加f1,f2文件
git add -u # -u是update的縮寫,只監(jiān)聽已經(jīng)被加入的文件,包括修改和刪除,不包括新增的文件和.gitignore中設置的忽略文件 添加到暫存區(qū)
git add . # 監(jiān)聽工作區(qū)的狀態(tài)樹,把工作區(qū)狀態(tài)樹的所有變化提交到暫存區(qū), 包括新增的和修改的,不包括刪除的文件和.gitignore中設置的忽略文件
git add -A # 等于 git add . + git add -u 不包括.gitignore中要忽略的文件
git add * # 等同git add -A
git commit -m "代碼提交信息"
git commit -a -m "代碼提交信息" # -a是把unstaged的文件變成staged(不包括新建的文件),然后commit
git commit --amend # 修改提交的commit(沒有push)
git commit --amend -m "comment" # 修改commit注釋
git push <遠程主機名> <本地分支名>:<遠程分支名>
git push -f <遠程主機名> <本地分支名>:<遠程分支名> // 強制推送
git push命令使用時常見的四種情況:
git push <遠程主機名> <本地分支名> | 如果遠程分支被省略,如上則表示將本地分支推送到與之存在追蹤關(guān)系的遠程分支(通常兩者同名),如果該遠程分支不存在,則會被新建 |
---|---|
git push <遠程主機名> :<遠程分支名> | 如果省略本地分支名,則表示刪除指定的遠程分支,因為這等同于推送一個空的本地分支到遠程分支,等同于 git push origin --delete 遠程分支 |
git push <遠程主機名> | 如果當前分支與遠程分支存在追蹤關(guān)系,則本地分支和遠程分支都可以省略,將當前分支推送到遠程主機的對應分支 |
git push | 如果當前分支只有一個遠程分支,那么主機名都可以省略 |
git fetch <遠程主機名> <遠程分支名>:<本地分支名>
git pull <遠程主機名> <遠程分支名>:<本地分支名> // 等于git fetch+git merge
git pull 常見的四種省略參數(shù)的情況,與git push比較類似。這里就不再贅述。git pull除了更新和自動合并當前代碼之外,還有更新倉庫所有分支的功能,注意是更新分支,不是更新分支上的代碼。
回退命令
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默認的模式,只有工作區(qū)保留改動
# --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在內(nèi)部有個指向當前版本的HEAD
指針,當你回退版本的時候,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 #恢復代碼
git add -A && git commit - m '備注'
(1) git reset只能針對本地操作,如果本地刪除的內(nèi)容已經(jīng)推送到遠程倉庫,下一次更新時,被刪除的內(nèi)容會恢復。git revert可以對對遠程服務器執(zhí)行回退操作。下一次更新時,本地被刪除的文件,不會恢復。
(2) git revert會使提交記錄增多,git revert是撤銷指定版本的提交,會產(chǎn)生一個新的提交記錄,git reset會使提交記錄減少,git 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
指向的版本是當前版本,Git允許我們使用命令git reset --hard commit_id
在歷史版本之間穿梭。穿梭前,用git log
可以查看提交歷史,以便確定要回退到哪個版本。要重返未來,用git reflog
查看命令歷史,以便確定要回到未來的哪個版本。
git cherry-pick
命令的作用,就是在當前分支上,把其它分支的提交記錄合并過來,這在兩個版本剛開始說要一起上線,后來一個版本不上線了,而代碼都攪合在發(fā)布分支,要撤銷不上線的代碼時,配合git reset指令,可以輕松實現(xiàn)發(fā)布分支不上線功能的代碼下撤。
a1 - a2 - a3 - a4 A
\
b1 - b2 - b3 B
現(xiàn)在將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>
當我們需要刪除暫存區(qū)或版本庫上的文件, 同時工作區(qū)也不需要這個文件了, 可以使用git rm
git rm file_path
git commit -m 'delete somefile'
git push
當我們需要刪除暫存區(qū)或版本庫的文件, 但本地又需要使用, 只是不希望這個文件被版本控制, 可以使用 git rm --cached
git rm --cached file_path
git commit -m 'delete remote somefile'
git push
推薦兩條簡寫提交日志格式設置參數(shù), lm-不顯示提交記錄匯總信息 lms-會現(xiàn)在提交記錄匯總信息
# 提交記錄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)<%an>'"
# 有提交記錄匯總信息 提交記錄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)<%an>'"
命令淺析:
--no-merges:不顯示分支合并日志
%h:簡短hash提交字符串
%cd:提交日期
%an:提交者
%s:提交說明
%C+顏色值+內(nèi)容=給內(nèi)容設置相應的顏色
看看這兩種風格的注釋是不是看著更優(yōu)雅,更舒服
在軟件發(fā)布時創(chuàng)建標簽,建一個發(fā)布版本的里程碑,是被推薦的。
#查詢版本號
git log --pretty=oneline --abbrev-commit
#創(chuàng)建tag
git tag v1.0.0 1b2e1d63ff -m '20210123 created'
#推送某個tag到遠程倉庫
git push origin tag_name
# 一次性推送所有tag到遠程服務器
git push origin --tags
# 查看某個tag記錄
git show tag-name
# 查看所有的tag
git tag -ln # 加-ln,查看tag簡略信息
// 取出打過tag的某個版本
git checkout -b branch_name tag_name
#刪除本地的tag命令是
git tag -d tag-name
#刪除遠程tag的命令是
git push origin --delete tag-name
#鏡像名稱不是隨意起的,要與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
每次提交前,檢查一下所提交代碼,是不是真正想修改的內(nèi)容
提交的粒度要細,頻率要高,能極大減少代碼沖突和重要改動無版本存儲問題
最好打通gitlab和釘釘,企業(yè)微信機器人代碼提交通知,有人提交代碼時,可以及時通知其它人更新,減少代碼沖突的概率
git的自動合并功能,有瑕疵,有時候文件的一些部分,合并是對的,一些部分,合并有沖突,最好逐個文件檢查
給項目配置husky工具,可以在提交代碼的時候,對代碼進行格式化,或者檢查是否符合lint規(guī)則,如果不符,可以終止提交
對于異常操作,一定要保留現(xiàn)場,查明原因,這樣記憶更深刻。
要看一下每條git命令的回顯,看看是不是你要執(zhí)行的操作, 有沒有遺漏或報錯或者執(zhí)行終止的情況
git減少代碼沖突的做法
分配任務時,盡量把任務拆分成獨立的模塊, 彼此之間的交集越少越好
對于容易沖突的大文件,可以指定由一個人去修改
將大文件拆分成多個子文件,將所有的子文件導入到一個index.ts索引文件中,使用的時候從索引文件中按需導出
組內(nèi)成員對預感會產(chǎn)生沖突的大文件,商量好修改順序
error: pathspec 'branch-xxx' did not match any file(s) known to git
git checkout 的分支不存在.git文件夾引起的
修改了文件的名稱,將小寫改成大寫,提交到git遠程倉庫,發(fā)現(xiàn)文件名稱沒有改變,解決方法是
git rm -r --cached .
3. 合并代碼,推薦用如下命令,比git merge更好用。
git pull origin remote_need_merge_branch_name
在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,解決方案是,強制刷新一下遠程的所有tag
git fetch --tags -f
5. .gitignore文件中設置的忽略文件不生效的解決方法,.gitignore中設置的忽略規(guī)則,是針對未添加到版本管理的文件而言,對已添加到版本庫的文件不生效。解決方法是將所有文件先從版本庫刪除,再重新添加一遍。
git rm --cached 要刪除的xxx文件夾或文件
6. Could not retrieve the pipeline status. ---- 無法檢索流水線狀態(tài)。
這種報錯是因為沒有流水線文件所致。
error: cannot lock ref ‘xxx’: ‘xxx’ exists; cannot create ‘xxx’
原因:git工程的.git/refs目錄下跟蹤的某些git分支,在pull時候發(fā)現(xiàn)與遠程倉庫對應的分支refs不同,因此導致 git pull 失敗
A同事$ git push -force
了test這個分支,導致遠程倉庫的分支被覆蓋,而你本地的refs則會與遠程倉庫的分支不一致,產(chǎn)生問題;
git分支是不區(qū)分大小寫,有人刪除了遠程倉庫的分支又重新創(chuàng)建一個同樣名字的分支同樣也會產(chǎn)生問題。
解決方法:
使用git命令 git update-ref -d xxx 刪除本地.git下的xxx文件
如果不行,強制更新 git pull -p 強制更新
8. The following untracked working tree files would be overwritten by merge,
原因: 遠端將某個文件加入了倉庫,本地把這個文件從倉庫中移除了,就會出現(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 ---強制運行 ,強制合并的思路走不通。
9. git默認對文件名稱大小寫不敏感,如果將原來小駝峰命名的文件改成了大駝峰,會發(fā)現(xiàn)本地git的改動文件提示,沒有任何修改。解決方法就是執(zhí)行
git config core.ignorecase false
刪除之前小駝峰文件的操作指令是
git mv readme.md README.md
已刪除的文件,并且本地已暫存,無法在暫存狀態(tài)下復原刪除的文件,將刪除文件從暫存?zhèn)}庫中移除,才能恢復刪除的文件。
錯誤: 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下存在同名目錄,就會報這個錯誤。
解決方法: 從一開始創(chuàng)建分支時,如果要創(chuàng)建一個以xxx為前綴的開發(fā)名,就要創(chuàng)建成xxx/test1這種格式。
感謝各位的閱讀,以上就是“git常見命令有哪些及怎么使用”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對git常見命令有哪些及怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
當前名稱:git常見命令有哪些及怎么使用
文章網(wǎng)址:http://www.rwnh.cn/article42/jjechc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站設計、網(wǎng)站制作、移動網(wǎng)站建設、商城網(wǎng)站、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)