git在错误的分支提交了代码,怎么处理

13 篇文章 0 订阅

最近在开发项目的一个小需求的时候,发生了一件尴尬的事情。那就是当我把新功能开发完成的时候,忽然发现自己开发使用的分支是错误的分支。不过我记得之前学习git的时候有一个git stash的命令可以把当前没有提交的内容存档起来,然后可以在切换分支之后把当前的存档应用到目标分支。
这里一般分为三种情况:

  • 1. 新功能还没有在本地进行commit(提交),也就是我这次遇到的情况
  • 2. 新功能已经在本地提交了,但是还没有push到远程仓库
  • 3. 新功能已经在本地提交了,且push到了远程仓库

第一种情况:
我们可以在当前情况下,使用:

git stash

这个命令表示把我们当前修改的内容暂存起来,然后我们的工作区就恢复到在没有开发新功能之前的样子

这个时候我要切换到正确的分支,然后:

git stash apply

这个命令表示把我们之前暂存的内容,应用到当前分支。

第二种情况:
首先我们需要知道在我们添加新功能之前,当前分支处于哪一个提交;

git log --oneline

查看当前的提交:

085095f (HEAD -> master) update 5
47e52ae update 3
14fefac update 2
fd01444 add README.md
3c76ad1 init

找到我们添加新功能时,当前分支所处的提交。假如是fd01444,那么我们接下来要做的操作就是将HEAD指针指向fd01444,也就是把我们当前分支已提交的内容重置到我们开发新功能之前的样子。我们需要运行下面的命令

git reset fd01444 # fd01444是某次提交的hash值

接下来我们需要把这些新开发的功能迁移到一个新的分支;接下来我们进行下面的操作:

git checkout -b <newbranch>

这样我们就创建了一个新的分支,并且把新添加的功能也都迁移了过去,接下来就是常规的添加和提交操作了。

新功能需要添加在另一个分支上

git log --oneline # 查找新功能开发之前的提交
git reset <commit hash> # 将当前分支重置到新功能开发之前的提交

第三种情况

首先我们应该保持当前的工作区是没有修改的,是一个干净的状态。不然使用撤销命令的时候会提示你需要把当前的文件内容变更先提交或者生成快照。当我们的工作区的状态是干净的时候,我们就可以进行撤销操作了。

首先需要知道我们应该撤销那一次提交的状态。使用git log --oneline查看要撤销的提交的索引,然后运行下面的命令:

git revert <commit>

如果需要撤销的提交比较多的话,我们可以使用…表示一个提交记录的范围。比如c1…c2就表示c2的可达提交,且排除c1的可达提交。所谓可达的提交指的是:提交本身及其祖先链中提交的集合。

我们可以举个例子:

... a - b - c - d - HEAD

如果上面表示的是某个分支的提交记录,那么对于b…d表示的就是c d这两个提交,对于a…d表示的就是b c d这三个提交。如果大家想了解更多相关的内容,可以在git-rev-list这里深入的学习一下。
所以我们如果想快速的撤销一段范围的提交的话,可以运行类似下面这样的命令:

git revert 54dc134..a72d612 --no-edit

上述命令的54dc134就表示c1,a72d612就表示c2,–no-edit表明我们在运行撤销操作的时候不打开编辑模式。

我们如果需要对远程的分支进行撤销的话,首先考虑的就是使用git revert命令,因为git revert命令不会修改历史的提交记录,只是在原来的提交基础上添加新的提交,所以不会造成代码的丢失。在多人合作的情况下使用git revert命令撤销push到远程的操作还是很有必要的。

妙招:
新功能已经在本地提交了,且push到了远程仓库。你直接撤销,等于就是白开发了。可以先使用git cherry-pick 再撤销

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值