- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
Git 是一个非凡的工具,但我还没有想出撤消推送更改的最佳方法。情况是这样的。
我在一个分支上,并已将多个提交推送到 GitHub。从那以后我就决定我在兔子洞里走得太远了,我们需要废弃我已经完成的几个提交,然后重新开始。本质上,我需要撤销所有推送的提交,回到之前的提交。这是我认为合适的两个命令
git revert # - creates a new commit that "undoes" the changes of one specific commit
git checkout 'commit SHA' # - sets the head to that specific commit, wherein I will re-push to the repo, undoing my changes... I think
那么,我说得对吗?我需要对要返回的特定提交执行 git checkout 吗?或者在这个复杂的过程中有什么我不理解的地方?
谢谢。
最佳答案
根据你推送的状态,有两种情况:
还没有人将推送的分支用于任何事情。在这种情况下,您可以使用 git reset
强制本地分支进行特定提交 - 然后你可以 git push
带有 --force
的分支参数。
但是,如果有人将他的工作建立在您不小心推送的分支上,那么您就无法真正重置它,因为他随后将根据处于不确定状态的分支进行更改。这是git revert
的地方发挥作用。它将记录一个反向补丁,有效地撤消早期的更改。这里的好处是其他人可以轻松地在分支上进行工作。
方法的选择取决于您的存储库的情况以及意外补丁在那里的时间。如果开发人员少,沟通和一个reset
大概就是答案。但是如果这个东西已经存在了很长时间,最好恢复原状 - 除非你想重写整个历史!
另一种看待它的方式是:git revert
是持久的,而 git reset / git push --force
是对历史的破坏性改写。两者都有适当的时间。
最后,当我跟随 Alice 深入 Rabbit hole 并调查后面的内容时,我通常会在本地创建的分支上进行。然后,如果我喜欢这些更改,我通常会将它们 merge 到一个测试分支中,让它们在测试分支上稍微搅拌一下,然后再将它们 merge 到 master
中。 .这样你就可以避免很多时候的问题。简而言之,我通常有 20-30 个本地分支机构,每个分支机构负责我正在处理的每个功能。他们倾向于首先进行单独测试。偶尔,我会创建一个新分支 test
并将所有内容 merge 到该分支并一起进行所有测试。为了跟踪跨分支的冲突,我使用 git rerere
.优点是我可以决定什么时候功能足够稳定可以推送给其他人。
关于Git:使用还原或 checkout 来撤消推送的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4818455/
我以这种方式恢复了 merge 提交(功能->开发): git revert -m 1 git push origin develop 已创建新提交 Revert "Merge branch 'fe
我确信我得到了一个很好的答案 my previous question因为我之前从那些发帖的人那里得到了很多关于其他问题的帮助。 但我显然做错了什么,因为当我复制示例代码时,对象检查器向我显示的 My
我现在处于一个非常愚蠢的境地。使用 git-hub for windows 我已经恢复了我最近的两个本地提交,我无法撤消这个(恢复命令)。很多代码都没有了。是否可能恢复还原的提交?我是 git 的新手
我正在使用 TortoiseGit。我想恢复到删除几张图片之前的某个时间点。 我该怎么做,我看到的还原方法是不正确的.... 最佳答案 右键单击您的工作目录并从 TortoiseGit 菜单中选择显示
我们使用 Terraform 在 AWS 中创建所有资源。如果一切按计划进行,那将很方便。但是,我们确实必须考虑出现问题的时间。我们有一个问题是 RDS 实例。它由 Terraform 创建和跟踪。在
跟在后面有什么区别? (右键单击项目文件夹)更新到修订版 XXX (右击日志列表)恢复到这个版本 (右键单击日志列表)还原此修订版的更改 最佳答案 (右键单击项目文件夹)更新到修订版 XXX Your
我不知何故搞砸了我的观点,我想重置它们,但是重置按钮是灰色的。有谁知道会导致这种情况的原因吗? 我希望我有更多的信息,但我真的只知道这些。 最佳答案 转到窗口菜单 => 重置透视图。 编辑: 该选项可
我有一个具有多用户登录功能的应用程序。现在,我为登录功能创建了 redux 存储。如果用户登录,根据其类型,它将重定向到特定的仪表板。如果学生用户登录,他应该只能访问学生仪表板,他不应该能够访问其他仪
我已经恢复了一些更改。需要知道之前恢复的代码中的文件和更改(差异)。 最佳答案 是的,正如 ElpieKay 所说,您可以使用 git log --grep='Revert' 。 还有一个默认消息“
出现错误 ERROR in [at-loader] ./src/app/components/partials/userPartial.tsx:101:33 TS2339: Property 'lev
我不明白为什么主 JS 文件不想从 './actions' 导入 todo 而不带括号? todos from './reducers' 类似的情况,import 没有任何问题。 主 js 文件: i
我像这样以编程方式应用 AngularJS 过滤器: filtered = $filter('number')(value, 2); 这会给我类似 5,000.00 的东西。我需要一种方法来获取过滤后
我正在尝试在我的应用中实现 Redux。所以,我创建了 action、reducer、store 等……现在我必须将状态传递给 reducer 并更改此参数( bool 值)的值。我不知道我做错了什么
我有一个带有如下 DIV 的跨度: Here is my 现在我可以将我的内容设置为跨度,例如: $(.span.foo).text("This removed my inn
我也想将另一个数据库名称下的特定数据库还原到另一台服务器。到目前为止,还不错。 我使用了这个命令: pg_dump -U postgres -F c -O -b -f maindb.dump main
有没有办法回滚上次的提交,放到单独的分支中,以供以后测试?我做了一些我不想完全丢弃的更改,我只是想将它们放在不同的分支中以供进一步测试。 谁能帮我解决这个问题? 最佳答案 是的,您可以实现这一点 -
开发人员正在对两个文件进行小的更改。但是在这次提交期间,他遇到了 merge 冲突,删除了很多东西(可能没有最新的版本)。然后它被推送到共享仓库,其他一些开发人员做了一些其他提交。 现在,我们注意到
git revert 是如何使用的? 这听起来像是一个重复的问题,但当人们问它时,回答通常是,按照 Revert to a commit by a SHA hash in Git? 使用 git re
Cloudflare 已修复其免费开源 CDNJS 中的一个严重漏洞,该漏洞可能影响互联网上 12.7% 的网站。 CDNJS为数百万网站提供超过4000个JavaScript和CSS库,这些库公
为了安全起见,需要经常对数据库作备份,或者还原。对于 MySQL 而言,最方便的方法可能就是用 phpMyAdmin 的导出、导入功能了,但如果你的数据库体积比较大,作为 Web 应用的 phpMy
我是一名优秀的程序员,十分优秀!