最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 【实用Git指南】哎呀,提交错了?全网最全的Git撤销提交指南

    正文概述 掘金(IcPanda)   2021-02-23   552

    前言

    开发过程就经常会遇到代码提交后,想撤销操作,那么如何进行Git的各种撤销操作呢?本文将Git的各种误提交对症下药的方法分享出来,读者可以选择情况学习,也可以收藏本文以备速查使用。

    一图胜千言

    【实用Git指南】哎呀,提交错了?全网最全的Git撤销提交指南

    文中会涉及到rebase操作,这时候会打开编辑器,用不习惯git的编辑器,这里建议将git的编辑器默认由vscode或vim打开,配置方法如下:

    # 配置为vscode
    git config --global core.editor "code --wait"
    
    # 配置为vim
    git config --global core.editor "vim"
    
    

    你需要提前了解的知识

    • Git的工作区、暂存区、版本库
    • Git的rebase、revert、reset命令

    按是否已经commit细说各种情况:

    1. 未commit的撤销方法

    commit分为以下两个场景

    1.1 未commit,未add

    场景: 本地做了文件增加或变更,但还未做git操作(git add .),希望清除本地变更,与git仓库保持一致。

    这种情况是最简单的

    STEP 1

    执行 git checkout . 即可重置已经修改的文件(不包括新增的文件,因为新增的文件还没被记录到git版本控制中)。

    STEP 2(可选)

    如果需要清除新增的文件,可以单个逐一删除,也可以执行git clean -df一键删除所有不在git版本控制的文件。

    git clean 是什么?

    1.2 未commit,已add

    场景: 本地做了文件增加或变更,但已经执行了git add .,希望清除本次变更,与git仓库保持一致。

    STEP 1

    执行git restore --staged . 将文件从暂存区拉回待commit列表

    SETP 2

    按照上文的「 未commit,未add」 操作即可


    2. 已commit的撤销方法

    2.1 撤回最近一次提交重新编辑

    场景: 本地做了文件增加或变更,但已经执行了commit,希望撤回最近一次提交重新编辑。

    STEP 1

    首先保证做了错误提交的操作后,当前工作区是干净的。执行 git reset --soft HEAD^ ,即可将本次提交撤回。 注意是 使用soft软重置来保持所有本地的变动。

    执行后就回到了git add .后的状态了,至于是否需要继续修改,还是撤销add后的变更(参考上文的方法),可根据实际情况进行。

    STEP 2 (如果push过,需要执行)

    如果做了错误的commit后,还顺手push上远端仓库了,就需要在reset后执行以下危险操作 git push -f origin 你的分支名 或缩略命令git push -f 强推到远端仓库。 当然这其中涉及到仓库的分支保护策略是否限制你进行强推该分支,以及是否只有你本人在该分支上做变更。比如 在你push后,又有别的开发同学进行了push,那么可能你强推仓库,开发大哥会强推你本人。

    2.2 丢弃最近一次提交

    场景: 变更已经commit,希望直接丢弃掉上一次变更,并且不留下提交记录

    STEP

    危险操作 执行 git reset --hard HEAD^ ,将代码库硬重置(会丢弃所有改动)指向到前一次提交,如果需要指定到某个commit id 可以 reset --hard 某个commitid

    2.3 回滚某一次提交

    场景: 变更已经commit,希望直接丢弃掉这一次变更,留下提交记录

    STEP

    执行 git revert 新增一个回滚提交。

    2.4 修改Commit Message

    场景: commit后,填错Commit Message了,希望保持本次提交,仅修改Commit Message。

    STEP

    执行 git commit --amend

    注:它同样可以用于修改最后一次提交

    2.5 合并多次提交

    场景: 修改一个文件a的过程,连续进行了多次commit,希望将多次连续commit合并为一个,其他开发同学只看到一次提交。

    例如:合并三次提交为一次

    STEP 1

    git rebase -i HEAD~3
    

    STEP 2

    这时会展示出最近三次提交,如下

    pick 690cb73 1
    pick 6f6a377 2
    pick 0a267b8 3
    
    

    我们将最后两次提交的pick改为squash,然后保存退出编辑器,如下

    pick 690cb73 1
    squash 6f6a377 2
    squash 0a267b8 3
    

    STEP 3

    连续三次自己的提交,一般是不会有冲突的,有冲突就处理下再commit,然后弹出的编辑器输入新的commit message,保存退出编辑器后提示,即完成操作啦。

    2.6 改写某个提交记录

    场景: 先后做了a,b,c三提交,但是还没push,想夹带私货,再对历史的b提交多做一些变更。

    STEP 1

    git rebase -i HEAD~~
    

    STEP 2

    将第一行的“pick”改成“edit”,然后保存并退出。

    pick 09ba200 b
    pick bc376e3 c
    

    STEP 3

    修改文件后,用commit --amend保存修改

    STEP 4

    git rebase --continue继续执行rebase

    STEP 5

    这时,有可能其他提交会发生冲突, 请修改冲突部分后再执行add和rebase --continue

    总结

    至此git的各种撤销提交方案说完了,借助git rebase 和git reset 还有更多的操作方法,大家可以在开发的漫漫长路中继续探索。

    参考资料

    用rebase -i 修改提交


    起源地下载网 » 【实用Git指南】哎呀,提交错了?全网最全的Git撤销提交指南

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元