生活随笔
收集整理的這篇文章主要介紹了
Git之常见零碎问题的原因分析和解决方案
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、Git 分支已經刪除
問題描述:遠程獲取分支最新代碼,下拉代碼的時候,提示遠程分支已經不存在:
? git pull
Your configuration specifies to merge
with the ref
'refs/heads/ipo_user'
from the remote
, but no such ref was fetched
.
解決方案:該分支已經在遠程倉庫中被刪除,因此需要切換到其它分支:
? git checkout dev
二、LFS 提交方式不對
問題描述:LFS 獲取文件,查看倉庫狀態的時候,發現有文件已經被刪除,但是 checkout 的時候,提示操作不當:
? git status
Changes
not staged
for commit
: ( use
"git add/rm <file>..." to update what will be committed
) ( use
"git checkout -- <file>..." to discard changes
in working directory
) deleted
: data
/ model
/ app1
. zip deleted
: data
/ model
/ app2
. zip
? git checkout
- - data
/ model
/ app1
. zip
Encountered
1 file ( s
) that should have been pointers
, but weren't
: data
/ model
/ app1
. zip
? git rm
- - cached
- r
.
? git reset
- - hard
三、LFS 撤銷歷史提交
問題描述:在倉庫修改 lfs 的 track 文件的時候,本應該會添加 “*.iso” 號結果修改成了錯了 “.iso”,導致 push 上去發現參數文件沒有使用 lfs 文件,現在需要將這一次關于 lfs 的提交 rewrite 掉:
$ git reset –hard
^ HEAD
$ git push origin master
解決方法:lfs 工具提供了 migrate 命令來處理這個問題:
$ git lfs migrate
import - - include
= "data/app_mold/*" - - everything
$ git push
- - force
Locking support detected on remote
"origin" . Consider enabling it
with :
. . . . . . !
[ remote rejected
] master
- > master
( pre
- receive hook declined
)
error
: failed to push some refs to
'git@xxx.xxx.com:xxx/app.git'
四、LFS 需要輸入密碼
Authentication failed
for 'https://______.git'
$ cd
~ / . ssh
$ ssh
- keygen
- t rsa
- C
"xxxxxx@yy.com"
$ ssh
- T git@github
. com
$ git config
- - global credential
. helper
'cache --timeout=3600'
$ git config
- - global credential
. helper store
五、LFS 無法獲取文件
問題描述:使用新版本的 LFS 工具的時候,某個環境發現如下報錯,排除原因發現是對應倉庫的 lfs 文件并沒有從遠程倉庫拉下來,服務更新都是使用的 CI/CD 工具,但是其他服務器獲取 lfs 文件并沒有任何問題,而且登錄服務器手動執行 git lfs pull 也是可以正常執行的。排除自動部署工具的默認參數和對應的 git 工具配置并沒有發現任何有用的信息:
2020 - xx
- xx xx
: xx
: xx
: I tensorflow
/ stream_executor
/ platform
/ default
/ dso_loader
. cc
: 28 ]
Traceback
( most recent call last
) : File
"/usr/lib/python3.6/runpy.py" , line
113 , in _run_module_as_main
"__main__" , mod_spec
) . . . . . . File
"/data/app_test/.../hhkc/.../network.py" , line
54 , in < module
> from transformers
. modeling_hhkc
import (
ImportError
: cannot
import name
'HhkcLayerNorm'
解決方案:這是因為 git-lfs 工具的版本太低導致其默認參數和新版的不一致,這才導致自動部署工具獲取 lfs 文件異常。出問題的服務器,當時安裝 lfs 工具都是使用 apt 來安裝的,所以默認的倉庫對應的軟件版本號比較低,所以按照官方網站的更新方式部署更新之后,一切都變得正常:
$ git lfs env
| grep
"dTransfers"
DownloadTransfers
= basic
UploadTransfers
= basic
DownloadTransfers
= basic
, lfs
- standalone
- file
UploadTransfers
= basic
, lfs
- standalone
- file
為文件URL
( 本地路徑
) 提供獨立傳輸適配器
https
: // github
. com
/ git
- lfs
/ git
- lfs
/ blob
/ master
/ docs
/ man
/ git
- lfs
- standalone
- file .1 . ronn
$ curl
- s https
: // packagecloud
. io
/ install
/ repositories
/ github
/ git
- lfs
/ script
. deb
. sh
| sudo bash
$ sudo apt
- get install git
- lfs
$ git lfs install
六、Git 切換分支不存在
問題描述:在一個測試倉庫上面需要臨時切換分支,但是切換分支的時候提示如下錯誤,提示沒有找到匹配的分支,但是登陸遠程倉庫,發現對應的分支是存在的。可能想到的原因是沒有更新代碼導致無法獲取遠程倉庫的分支信息,隨即執行這個 git fetch 命令,但是報錯依舊,且通過 git branch -a 也看不到對應的分支信息:
$ git checkout bugfix_login_error
error
: pathspec
'bugfix_login_error' did
not match
any file ( s
) known to git
.
解決方案: 后來,排查了一下 .git 目錄文件夾里面的信息,隨即發現了問題原因,即遠程倉庫的獲取只是對標于 master 分支,所以通過執行 git fetch 命令之后也是無法獲取遠程倉庫的分支信息的,按照如下修改即可解決:
$ cat
. git
/ config
[ remote
"origin" ] url
= git@github
. com
/ EscapeLife
/ app
- demo
. gitfetch
= + refs
/ heads
/ master
: refs
/ remotes
/ origin
/ master
[ branch
"master" ] remote
= originmerge
= refs
/ heads
/ master
[ remote
"origin" ] fetch
= + refs
/ heads
/ * : refs
/ remotes
/ origin
/ *
問題原因: 我們正常克隆倉庫的時候,對應的 config 配置就是帶 * 的樣式,但是為什么這個環境的配置會修改了呢?這是因為環境是通過 CI 進行自動更新的,而 CI 配置只獲取指定分支的代碼,即拉去代碼的時候就指定,這也就導致配置文件也就跟著變更:
$ git fetch origin master
: refs
/ remotes
/ origin
/ master
七、Git 顯示中文亂碼
問題描述:使用 git status 命令查看文檔或者目錄改動時,顯示不出中文文件名和中文文件名稱,非常不方便:
? git status
Changes
not staged
for commit
: ( use
"git add/rm <file>..." to update what will be committed
) ( use
"git restore <file>..." to discard changes
in working directory
) deleted
: 234 \
123 \
234 \
654 \
234 / 954 \
236 \
952 / . vscode
/ settings
. json
解決方案:在默認設置下,中文文件名在工作區狀態輸出,中文名不能正確顯示,而是顯示為八進制的字符編碼。將 git 配置文件 core.quotepath(引用路徑) 項設置為 false,即可顯示中文。要注意的是,這樣設置后,git bash 終端也要設置成中文和 utf-8 編碼,才能正確顯示中文。
? git config core
. quotepath false
? git config
- - global core
. quotepath false
? vim
/ etc
/ gitconfig
[ core
]
quotepath
= false
八、Git 恢復丟失數據
問題描述:使用 Git 工具管理倉庫的時候,意外刪除文檔,重置倉庫,如何快速恢復丟失的數據呢?重置數據,一般都是使用了 reset 命令導致的,因為其命令用于改變當前的倉庫狀態。如下所示,是常見的 Git 重置操作,一旦執行之后,如果那該怎么辦呢?
$ git reset HEAD
< file >
$ git reset
[ commit
]
$ git reset
[ commit
]
$ git reset
- - soft
[ commit
]
$ git reset
- - soft
[ commit
]
$ git reset
- - hard
[ commit
]
$ git reset
- - hard
[ commit
]
$ git reset
- - keep
[ commit
]
$ git reset
- - mixed
[ commit
]
解決方案:當操作進行版本回退,現在又需要回退之前的文件信息,此時分為三種情況: 之前的修改進行 commit 提交,即執行 git commit; 之前的修改未進行 commit 提交,即執行 git add; 之前的修改未進行 commit 提交,即也沒有執行 git add;
$ git reflog
$ git reset
- - hard
[ hash ]
$ git fsck
- - lost
- found
因為根本就沒有被Git接管,所以恢復就無從談起
但是如果使用的是JB
( jetbrains
) 家的IDE工具,可以通過自帶的文件歷史功能成功恢復!
= > 右鍵菜單本地歷史功能
九、Git 忽略冗余文件
問題描述:使用過蘋果電腦的話,肯定只有默認會給目錄生成的 .DS_Store 文件。在 macOS 系統上面,我們會看到每個目錄都會存在一個名為 .DS_Store 的隱藏文件,其作用就是以告訴 Finder 應該如何顯示它,但是 99% 的時間我們都不關心它,尤其是在代碼庫中,我們更不愿意或者關注它。雖然,可以在代碼庫里面使用 .gitignore 文件進行忽略,但是每個項目都要來一遍,也挺麻煩的:
? ls
- lh
- rw
- r
- - r
- - @
1 escape staff 22K Jan
16 15 : 39 . DS_Store
drwx
- - - - - - 48 escape staff
1. 5K Jan
16 16 : 05 . Trash
解決方案:如果做到一次配置,全局忽略 .DS_Store,就是我們繼續要解決的問題。Git 中可以通過設置 core.exclusudesfile 變量來指定全局的 gignore 文件。
* . log
. DS_Store
$ cat
. gitignore_global
. DS_Store
. Spotlight
- V100
. Trashes
Thumbs
. db
$ ln
- s
/ Users
/ escape
/ fuckcode
/ dotfiles
/ . gitignore_global
/ Users
/ escape
/ . gitignore
$ git config
- - global core
. excludesfile
~ / . gitignore
$ cat
. gitconfig
excludesfile
= ~ / . gitignore
十、Git 分支切換異常
問題描述:使用 clean 命令的時候需要謹慎,不然容易丟失數據。在代碼倉庫中切換分支,提示如下錯誤,導致無法正常切換:
? git checkout stable
error
: The following untracked working tree files would be overwritten by checkout
:
解決方案:通過錯誤提示可知,是由于一些 untracked working tree files 引起的問題,只要解決這些 untracked 的文件就能解決:
? git clean
- n
? git clean
- df
? git clean
- d
- fx
總結
以上是生活随笔 為你收集整理的Git之常见零碎问题的原因分析和解决方案 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。