動態

詳情 返回 返回

個人記錄 - GIT常見問題解決辦法彙總 - 動態 詳情

哈嘍,大家好!我是「勵志前端小黑哥」!

本人專職前端開發十年!會不定時更新自己遇到的各種技術問題!
記得關注我!

此篇文章記錄本人在使用git命令時遇到的問題,及其處理辦法。

1、回退版本至某次提交

首先,需要知道這次提交的commit id,可以使用git log命令,根據自己的提交日誌及時間查找id

然後,使用git reset命令將本地分支強制重置為id時的狀態,如下

git reset --hard commit-id

注:commit-id是git log中找到的id。

最後,如果需要將此回退推送到遠程倉庫,可以使用強制推送,如下

git push origin HEAD --force

需要注意的是,這個提交會將遠程倉庫強制覆蓋,請謹慎使用。

2、.gitignore文件修改不起作用

產生這個問題的原因,是因為ignore文件中新增的忽略文件在之前的版本中已經提交至遠程庫。

解決辦法就是要刪除忽略文件在本地的git緩存,再提交至遠程庫,如下

git rm -r --cached xxx.file

git commit -m `"ignore"`

git push

3、如何刪除中間的某次提交

某次提交不小心push到遠程倉庫了,不用擔心,如下即可

git rebase -i pre_commit_id(前一次提交id)

# 接下來將需要刪除的提交 pick修改為 drop

# 然後Esc後 wq保存

# 最後強制推送至遠程

git push origin HEAD --force

注意:這種方式會刷新該次提交之後的提交記錄,會為他們生成一個新的commit_id,故:慎用

4、gitlab push時出現GitLab: You are not allowed to force push code to a protected branch on this project

登錄至gitlab取消保護即可

image.png

5、git 創建tag、刪除tag相關的命令

## 創建本地tag,tag名為xxx

git tag xxx

## 將本地tag名xxx推送至遠端

git push origin xxx

## 刪除tag名xxx

git tag -d xxx

## 將刪除的tag名xxx推送至遠端

git push origin :refs/tags/xxx

6、github如何創建一個Release版本

直接按照github中的創建按鈕操作就行,如果沒有tag,它會自動生成一個對應的tag

image.png

7、git子模塊更新問題

git的子模塊只映射到某一次提交記錄,若一個項目存在子模塊,只需要運行下面兩條命令即可

git submodule init

git submodule update

這種辦法只會更新至當前項目映射的提交記錄,並不會更新子模塊最新的提交。

關於這個問題,你切換至子模塊看看子模塊的分支便可知道原因

F:\father\child>git branch

* (HEAD detached at c6ca594)

local

master

當前子模塊並不在任何分支,而是在一個分離的HEAD分支。

這個時候,如果你需要合併最新的代碼至當前主模塊,只需要合併需要的分支即可

# 將local分支的最新記錄合併至當前分支

F:\father\child>git merge local

# 回到主模塊,提交當前的合併記錄,並推送至遠程分支

F:\father>git add child

F:\father>git commit -m `"合併local最新提交"`

F:\father>git push

這就大功告成了。

這裏有一點需要注意,我們偶爾需要在子模塊進行開發,如果在子模塊切換了分支,就找不到分離HEAD分支了。

這個時候回到主模塊,強制更新一下即可

F:\father>git submodule update -f

根據.gitsubmodule文件同步遠端代碼

git submodule update --remote

8、遠程倉庫遷移或改名,需要修改本地推送地址

git remote set-url origin http://your/new/repo.git

Add a new 評論

Some HTML is okay.