84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
1.修改文件A,commit并push到远程仓库
2.修改文件B,commit,也push到了远程
3.现在A文件的修改错误了,需要回滚到之前的版本,但是文件B的修改需要保存下来,请问现在应该如何操作?
如果用git reset --hard命令回滚到A修改的版本号,那么B的修改也被丢弃了
$ 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" ...
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
git reset
git revert
git rebase -i HEAD^^^用默认编辑器打开一个文档,修个A那次提交前面改成drop或简写为d 保存。会自动舍弃那次提交(如果有冲突要自己解决冲突)
git rebase -i HEAD^^^
A
drop
d
git log 查看 A之前 A B的commitId
git reset --hard A之前的commitId
git cherry-pick B的commitId
这个功能叫检出功能,可以拿到某一次提交的修改
只能revert,不能reset,凡是已经push到远程的commit都不能reset或者commit --amend,这个会破坏别人的版本历史。
关于revert可以看看我的这篇文章:/a/11...
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
,会产生一个单独的 commitgit rebase -i HEAD^^^
用默认编辑器打开一个文档,修个
A
那次提交前面改成drop
或简写为d
保存。会自动舍弃那次提交(如果有冲突要自己解决冲突)
git log 查看 A之前 A B的commitId
git reset --hard A之前的commitId
git cherry-pick B的commitId
这个功能叫检出功能,可以拿到某一次提交的修改
只能revert,不能reset,凡是已经push到远程的commit都不能reset或者commit --amend,这个会破坏别人的版本历史。
关于revert可以看看我的这篇文章:/a/11...