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



打赏作者

发表评论

电子邮件地址不会被公开。 必填项已用*标注