方法:
reset
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.使用“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”推上远程库:
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".
|
番外:语言设置
1
2
|
"User Name" -> "Settings" -> "Profile" -> scroll down to "Main settings"
"用户名" -> "设置" -> "用户资料" -> 滑到 "主要设置"
|
GitLab Community Edition 13.7.4
1
2
|
"Admin Area" -> "Settings" -> "Genneal" -> scroll down to "Visibility and access controls".
"管理中心" -> "设置" -> "通用" -> 滑到 "可见性与访问控制".
|
番外:语言设置
1
2
|
"User Name" -> "Settings" -> "Preferences" scroll down to -> "Localization"
"用户名" -> "设置" -> "偏好设置" 滑到 -> "本地化"
|