哈嘍,大家好!我是「勵志前端小黑哥」!
本人專職前端開發十年!會不定時更新自己遇到的各種技術問題!
記得關注我!
此篇文章記錄本人在使用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取消保護即可
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
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