Git撤销已经推送(push)至远端仓库的提交(commit)信息操作_相关技巧

来源:脚本之家  责任编辑:小易  

你刚刚将你本地的分支2113推送到了远5261程仓库中,但是却突然发现到其中4102的一个Commit错了,或者有一些很严1653重的拼写错误。当然,这没什么大不了的,你能解决。但是你必须手脚快一点,在别人同步这些Commit前解决它,否则被坑了的同事会画小圈圈诅咒你的:)首先,有两个备选方案可以让你的历史记录完好无损:备选方案一:在一个新的Commit中改正错误最简单的方法就是将错误的文件修复好后作为一个新的Commit提交,并同步到远程仓库中。这是一种很直观、也很安全的修复方式,在99%的情况下你都应该使用这种方法,除非这个错的Commit中包含敏感信息。备选方案二:完全恢复(Revert)这个Commit有时候你会希望撤销一个Commit的全部更改,幸运的是你可以告诉Git去恢复这个Commit而不用手动地去做这件事。恢复的时候甚至可以不必是最后一个Commit。恢复一个Commit意味着你会撤销这个错误的Commit中的所有更改。就像刚刚的例子中,这个错误的Commit的记录仍然存在,只不过它不再影响当前工作的分支和任何后续的Commit了。$ git revert dd61ab32关于历史重写一般来说我们会避免重写提交的Commit历史,一个很重要的原因就是它会使其他Clone过或Fork过你代码的人和你岔出不同的分支,导致他们不再能pull你重写了的历史记录和后续Commit。如果他们在本地做了一些更改想同步到远程仓库上,需要一些高级的Git知识来理解怎样让Git正常进行工作。然而有时候你确实就像重写历史记录,无论是因为泄露了敏感信息还是想清除一些本不应该在代码中的非常庞大的文件,亦或者你仅仅就是想要一个干净的历史记录(当然我确实这么做过)。我平常迁移Subversion或Mercurial项目到Git中时也做过大量的重写历史记录的工作,无论是为了统一LF行结束符,修改提交者的名字、邮箱地址,还是为了从版本库中彻底删除那些大文件。最近我也因为一个大的版本库中一个很早的Commit引起了越来越来多错误而重写了版本库历史。是的,如果可能的话你应该重写那些已经扩散到了其他fork代码中的历史记录,即使你这样做了也不会世界末日。比如,你仍然可以用Cherry-pick在历史记录中来移动Commit来处理那些在旧历史记录中的Pull请求。请记住,在开源项目中重写历史记录前先联系版本库的管理者。有的管理者一般情况下不允许任何重写历史,并且会拉黑那些这么做的人,而另外一些管理者倾向于他们自己来做重写。情形1:删除最后一次Commit删除最后一次Commit是最简单的一种情况。例如,我们现在有一个拥有master分支的远程仓库mathnet,它现在处于最新的Commitdd61ab32下。我们希望移除这个最新的Commit,或者用Git语言说,我们想force远程仓库mathnet的master分支到dd61ab32的父Commit上。$ git push mathnet +dd61ab32^:master在Git命令中,x^代表x的父节点,+代表一个强制的非快速推送(forced non-fastforward push)。如果你在本地已经处于master分支下了,你也可以通过两个简单的步骤来实现同样的效果:先回退到父Commit,然后强制推送给远程仓库。$ git reset HEAD^ --hard$ git push mathnet -f情形2:删除倒数第二个Commit现在我们假设需要删除的Commit没有在历史记录的顶部,而是一个稍旧一点的Commit,比如倒数第二个。我们希望删除它同时保留其后的所有Commit,换句话说我们希望重写历史记录然后将重写强制应用到mathnet的master分支上。重写历史的最简单的方法是对错误的Commit做一个互相的变基:$ git rebase -i dd61ab32^这个命令会打开一个vi编辑窗口,显示了从我们想删除的Commit以来的所有Commit。pick dd61ab32pick dsadhj278简单地删除我们想删除的Commit信息,在这里我们删除第一行即可(在vi中删除当前行的命令为dd)。保存退出编辑器(在vi中输入:wq然后按回车键),然后解决一下有可能的冲突,然后强制推送到远程仓库就大功告成了:$ git push mathnet -f情形3:修复一个Commit中的拼写错误这种情形下的操作与情形2十分相似,但不是删除Commit信息,而是将pick和edit换一下位置然后保存退出即可。然后变基时,操作将会停在那个Commit上,这时你可以对这个索引做任何你想做的操作。完成后Commit改动然后继续变基(如果你想的话Git会告诉你如何保持Commit的附加信息),然后继续按情形2进行推送。用同样的方法可以将一个Commit分成很多小的Commit,或者将很多Commit合并到一起www.zgxue.com防采集请勿采集本网。

有关修改提交(git commit)信息的方法可以参考: Git commit –amend 修改提交信息

任何一个版本控制系统中,最有用的特性之一莫过于 “撤销(undo)”操作。在Git中,“撤销”有很多种含义。 当你完成了一次新的提交(commit),Git会及时

有时,在git push之后,才发现还有一些代码需要进行很小的改动,这些改动在原则上不应该作为一次新的提交。

如果不小心commit了一个不需要commit的文件,可以对其进行撤销。 先使用git log 查看 commit日志 commit 422bc088a7d6c5429f1d0760d008d86c505f4abe

这时,我们需要撤销这次推送(git push)与提交(git commit),然后进行代码修改,再重新进行提交和推送。

1、打开git终端窗口,切换目录,然后git init进行一个初始化动作。 2、git status,可以查看有多少个文件可以加入暂缓区。 3、git add -A,这个时候把状态

为了实现这个目的,需要进行三步操作。

一、本地切换到master分支git checkout master 二、新建old_master分支备份,以防万一 git branch old_master git push origin old_master:old_master 将

1.撤销提交信息

一、本地切换到master分支git checkout master 二、新建old_master分支备份,以防万一 git branch old_master git push origin old_master:old_master 将

首先,通过git log查看提交信息,以便获取需要回退至的版本号:

$ git logcommit a44822002522f2ab1e3a5e2a1cec00a7d3d02185 (HEAD -> master, origin/master, origin/HEAD)Author: hanchao5272 <89298141@qq.com>Date: Sun Mar 4 11:14:55 2018 +0800CSDN-java反射06-成员变量Field-代码优化

commit aa909cff2239536df14820fe086d96305b24e9f1Author: hanchao5272 <89298141@qq.com>Date: Sat Mar 3 23:43:03 2018 +0800CSDN-java反射-修饰符-代码优化

我们需要撤销CSDN-java反射06-成员变量Field-代码优化这次提交,所以需要回退至的版本是CSDN-java反射-修饰符-代码优化,即需要回退至的版本号是:aa909cff2239536df14820fe086d96305b24e9f1。

然后,通过git reset –soft <版本号>重置至指定版本的提交,达到撤销提交的目的:

$ git reset --soft aa909cff2239536df14820fe086d96305b24e9f1

参数soft指的是:保留当前工作区,以便重新提交

还可以选择参数hard,会撤销相应工作区的修改,一定要谨慎使用

然后,通过git log确认是否成功撤销:

$ git logcommit aa909cff2239536df14820fe086d96305b24e9f1 (HEAD -> master)Author: hanchao5272 <89298141@qq.com>Date: Sat Mar 3 23:43:03 2018 +0800CSDN-java反射-修饰符-代码优化

已经成功撤销。

2.撤销

通过git push origin master –force强制提交当前版本号,以达到撤销版本号的目的:

$ git push origin master --forceTotal 0 (delta 0), reused 0 (delta 0)To github.com:hanchao5272/myreflect.git+ a448220...aa909cf master -> master (forced update)

必须添加参数force进行强制提交,否则会提交失败,并报错:

$ git push origin masterTo github.com:hanchao5272/myreflect.git! [rejected] master -> master (non-fast-forward)error: failed to push some refs to 'git@github.com:hanchao5272/myreflect.git'hint: Updates were rejected because the tip of your current branch is behindhint: its remote counterpart. Integrate the remote changes (e.g.hint: 'git pull ...') before pushing again.hint: See the 'Note about fast-forwards' in 'git push --help' for details.

报错原因:本地项目版本号低于远端仓库版本号。

3.修改代码,重新提交和推送

//修改代码,添加修改git add .//重新提交git commit -m "CSDN-java反射06-成员变量Field-代码优化"//重新推送git push origin master

以上这篇Git撤销已经推送(push)至远端仓库的提交(commit)信息操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持真格学网。 您可能感兴趣的文章:Git commit --amend 修改提交信息操作Git提交日志修改方法实例汇总git log根据特定条件查询日志并统计修改的代码行数git push 本地项目推送到远程分支的方法(git命令版)git 将本地文件(夹)上传到gitee指定分支的处理方法

首先已经push到远程仓库2113的提交5261,有可能已经被其他人pull到他们的本地仓4102库,而且他们有可能已1653经在你的提交的基础上进行开发,这样你rollback你的提交,就会影响到其他人。如果你确定你的提交没有被其他人pull,或者你可以通知到其他人。那么你可以在push命令里加入 --force,这样远程分支的HEAD就会被强制修改成和你本地的一样。如果你想rollback你的本地提交,可以用 rebase 命令内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • git rebase -i 修改历史提交的方法
  • git 命令使用技巧提供工作效率
  • 极验验证码 安装部署详细介绍
  • adb shell input keyevent 控制按键输入的数值(收藏版)
  • 程序开发中的几个请不要相信
  • vscode 打字特效插件power mode安装使用介绍
  • windows 中 \r\n 区别于 类unix中的\n 疑问理解(crlf回车换行)
  • vscode的jsconfig配置文件说明详解
  • http协议详解_动力节点java学院整理
  • tcp关闭问题详细介绍
  • git 如何撤销远程仓库中的最后一个commit
  • 如何还原一个已经同步到远程仓库的Commit
  • 如何在 Git 里撤销任何操作
  • Git中把自己的本地版本库推送到远程版本库后,怎么...
  • 如何在Git中撤销一切
  • git 已经commit的文件怎么撤销
  • git commit后怎么撤销
  • 怎么删除git远程仓库上某次commit
  • git 怎样删除远程仓库的某次错误提交
  • git回退到某一次提交以后再怎样回到最新的
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全javascriptasp.netphp编程ajax相关正则表达式asp编程jsp编程编程10000问css/htmlflex脚本加解密web2.0xml/rss网页编辑器相关技巧安全相关网页播放器其它综合dart首页相关技巧git commit --amend 修改提交信息操作git提交日志修改方法实例汇总git log根据特定条件查询日志并统计修改的代码行数git push 本地项目推送到远程分支的方法(git命令版)git 将本地文件(夹)上传到gitee指定分支的处理方法git rebase -i 修改历史提交的方法git 命令使用技巧提供工作效率极验验证码 安装部署详细介绍adb shell input keyevent 控制按键输入的数值(收藏版)程序开发中的几个请不要相信vscode 打字特效插件power mode安装使用介绍windows 中 \r\n 区别于 类unix中的\n 疑问理解(crlf回车换行)vscode的jsconfig配置文件说明详解tcp关闭问题详细介绍2019最新的pycharm激活码(推荐)进制转换算法原理(二进制 八进制eclipse 格式化代码时不换行与自微信小程序设置http请求的步骤详几款开源的中文分词系统从console.log说起(console.log详十进制负数转换为二进制、八进制url 长度有限制吗?git 撤销操作、删除文件和恢复文git入门【推荐】人工智能机器学习常用算法总结及各个常用github入门教程 手把手教你最简单的开源项git之如何把本地文件上传到远程仓库的指定三招两式 解决图片盗链无法查看问题详解http协议简介flippingbook使用教程(附下载)深度学习开源框架基础算法之傅立叶变换的git rebase 成功之后撤销的操作方法
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved