目录

Git提交错误怎么办

方法:

reset

./1.png

1
2
3
4
git reset --hard <commit_id>
git push origin HEAD --force
# 或
git push origin HEAD --force

其他:

1
2
3
4
5
6
7
#根据–soft –mixed –hard,会对working tree和index和HEAD进行重置:
git reset --mixed 
#此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留源码,回退commit和index信息
git reset --soft
#回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
git reset --hard
#彻底回退到某个版本,本地的源码也会变为上一个版本的内容

HEAD 最近一个提交 HEAD^ 上一次 <commit_id> 每次commit的SHA1值. 可以用git log 看到,也可以在页面上commit标签页里找到.

reset的结果是完全回复到某次提交的状态,但是有可能再多人开发时,不能及时通知导致冲突

revert

./2.png

2.使用“git revert -n 版本号”反做,并使用“git commit -m 版本名”提交: (1)反做,使用“git revert -n 版本号”命令。如下命令,我们反做版本号为8b89621的版本:

1
git revert -n 8b89621019c9adc6fc4d242cd41daeb13aeb9861

注意: 这里可能会出现冲突,那么需要手动修改冲突的文件。而且要git add 文件名。 (2)提交,使用“git commit -m 版本名”,如:

1
git commit -m "revert add text.txt" 

此时可以用“git log”查看本地的版本信息,可见多生成了一个新的版本,该版本反做了“add text.txt”版本,但是保留了“add text2.txt”版本:

3.使用“git push”推上远程库:

1
git push

commit合并

有时commit太多,而且可能一个commit只是提交一个小bug,那么合并commit势在必行。 有两种方法: 一是在提交最后一个修改的commit使用参数,这时之前的一个commit将会合并到这个即将提交的commit中来:

1
2
git commit -a --amend -m "my message here"如果之前有一个提交,并且信息为:
git commit -a -m "my last commit message"

则这个commit message将不存在。但该commit的信息已经合并到"my message here"中了。

第二个是,如果你提交了最后的修改,这时可用:

1
2
git reset --soft HEAD^ #或HEAD^意为取消最后commit
git commit --amend

这将会把最后一个commit合并到前一个提交中去,例如(由上往下读):

1
2
3
4
git add b.text
git commit -a -m "my message here"
git add a.text
git commit -a -m "my last commit message"

那么最后存在的将是"my last commit message"。也可后退n个,合并到前面第n+1个commit中去:

1
2
$ git reset --soft HEAD~n #后退到第n,我也不清楚具体含义。
$ git commit --amend [-m "new message"]

我觉得最方面的是调用reflog查看操作历史,找到具体的commit id,然后直接git reset –hard [commit_id]就回到你要的版本!

强制Push注意事项

本地回复后需要使用–force强制push到远程仓库

1
git push origin --force

会报如下错误:

1
You are not allowed to force push code to a protected branch on this project

如果用的是gitlab版本库,这说明gitlab对仓库启用了保护,需要在仓库中设置一下:

GitLab Community Edition 11.7.5

1
2
"Settings" -> "Repository" -> scroll down to "Protected branches".
"设置"     -> "仓库"       -> 滑动到          "Protected branches".

./3.jpg

番外:语言设置

1
2
"User Name" -> "Settings" -> "Profile" -> scroll down to "Main settings"
"用户名"    -> "设置"      -> "用户资料" -> 滑到           "主要设置"

./4.jpg

GitLab Community Edition 13.7.4

1
2
"Admin Area" -> "Settings" -> "Genneal" -> scroll down to "Visibility and access controls".
"管理中心"    ->  "设置"    -> "通用"    -> 滑到            "可见性与访问控制".

./5.jpg

番外:语言设置

1
2
"User Name" -> "Settings" -> "Preferences" scroll down to -> "Localization"
"用户名"     -> "设置"     -> "偏好设置"     滑到           -> "本地化"

./6.jpg