git 如何回滚
过去多啦不再A梦
过去多啦不再A梦 2017-05-02 09:37:50
[Git讨论组]

场景:

  • 1.修改文件A,commit并push到远程仓库

  • 2.修改文件B,commit,也push到了远程

  • 3.现在A文件的修改错误了,需要回滚到之前的版本,但是文件B的修改需要保存下来,请问现在应该如何操作?

如果用git reset --hard命令回滚到A修改的版本号,那么B的修改也被丢弃了

过去多啦不再A梦
过去多啦不再A梦

全部回复(10)
巴扎黑
$ mkdir test
$ cd test
$ git init
$ echo aaaa>a.txt
$ echo bbbb>b.txt
$ git commit -a -m "init two files"
[master (root-commit) 2ca34b8] init
...
$ echo update>a.txt
$ git commit -a -m "update file a"
[master **e216f56**] update file a
...
$ echo update>b.txt
$ git commit -a -m "update file b"
[master 6906147] update file b
...
$ git revert **e216f56**
unix2dos: converting file f:/test/.git/COMMIT_EDITMSG...
dos2unix: converting file f:/test/.git/COMMIT_EDITMSG...
[master 2a9c653] Revert "update file a"
...
PHPz

git revert (版本号)

仅有的幸福

这么做不会丢吧,我们都是这么做的..
git reset --hard命令回滚到A修改的版本号
git pull --rebase origin 分支号 拉下来B的代码看看有没有冲突,有冲突解决
后 git push ..

给我你的怀抱

git reset --soft HEAD@{id},这样就是将提交撤回了,但是工作区的修改不会消失,然后将错误的修改改对了再提交并push到远端吧

我想大声告诉你

这种情况,我一般直接查log,把A文件还原,保证B文件完整

大家讲道理

不可以直接把错了的修改好,然后提交一次覆盖掉吗?

伊谢尔伦

不要在 public branch 上对已经提交的 commit 使用 git reset,如果有人已经 pull 了这些 commit,会很麻烦
这种情况下应该用 git revert,会产生一个单独的 commit

ringa_lee

git rebase -i HEAD^^^
用默认编辑器打开一个文档,修个A那次提交前面改成drop或简写为d 保存。
会自动舍弃那次提交(如果有冲突要自己解决冲突)

PHP中文网
  1. git log 查看 A之前 A B的commitId

  2. git reset --hard A之前的commitId

  3. git cherry-pick B的commitId

这个功能叫检出功能,可以拿到某一次提交的修改

伊谢尔伦

只能revert,不能reset,凡是已经push到远程的commit都不能reset或者commit --amend,这个会破坏别人的版本历史。

关于revert可以看看我的这篇文章:/a/11...

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号