如何撤回Git push 到远程分支以后的方法

本文详细介绍了在Git中撤销已推送到远程分支的错误提交的方法。首先,通过git log和git reflog命令查询提交日志记录,找到目标提交ID。然后,使用git reset --hard命令进行本地版本回退。最后,通过git push origin 分支名 --force命令强制推送,实现远程分支的回滚。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Git push 到远程分支以后的撤回方法

你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

解决流程

假如最近的这次push ,我们发现有错误或者提交到不该提交的分支上了或者其他原因,总之想从远程分支上撤销下拉。

一、查询Git提交日志记录。

1. 首先要查看提交日志记录,找到记录ID,这个过程有两种方式

1.采用 git log 命令
2.采用git reflog 命令

2. git log

这种查询 查询的日志量会比较臃肿,不太好看,可以进一步使用 格式化命令git log --pretty=oneline 输出简洁信息

huilong-MackPro:dragon zhanghuilong$ git log
commit 28905311ca76ebc526d2032f2d4e75bee7be4e97 (HEAD -> develop, origin/develop)
Author: zhanghuilong <zhanghuilong@corp.netease.com>
Date:   Wed Jan 9 10:46:39 2019 +0800

    第3次 commit

commit 82056bb137f14ff4db4317d5e77d0bb872d8bb51
Author: zhanghuilong <zhanghuilong@corp.netease.com>
Date:   Wed Jan 9 10:45:01 2019 +0800

    第2次 commit

commit 23c83d0e4bb90fd81be37716e15ca7b4bbe92d84
Author: zhanghuilong <zhanghuilong@corp.netease.com>
Date:   Wed Jan 9 10:37:19 2019 +0800

    第一次 commit

3. git log --pretty=oneline
huilong-MackPro:dragon zhanghuilong$ git log --pretty=oneline 
28905311ca76ebc526d2032f2d4e75bee7be4e97 (HEAD -> develop, origin/develop) 第3次 commit
82056bb137f14ff4db4317d5e77d0bb872d8bb51 第2次 commit
23c83d0e4bb90fd81be37716e15ca7b4bbe92d84 第一次 commit
d3fa4ea0de5b2f07a456b9ddf85dca0d1be20ae3 add getbyId method
fc4e4251cbf27d4352b06b25576c9eee7a238c09 add get method

4. git reflog

HEAD就代表当前 {n}, 0 表示当前分支,1代表上一次提交 ,以此类推。

huilong-MackPro:dragon zhanghuilong$ git reflog
2890531 (HEAD -> develop, origin/develop) HEAD@{0}: commit: 第3次 commit
82056bb HEAD@{1}: commit: 第2次 commit
23c83d0 HEAD@{2}: commit: 第一次 commit
d3fa4ea HEAD@{3}: commit (amend): add getbyId method
5fa550c HEAD@{4}: commit: add get method

5.区别点:
git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

二、进行版本回退

1. 本地回退

【 假如:第三次提交的是有问题的,想回退: 2890531 (HEAD -> develop, origin/develop) HEAD@{0}: commit: 第3次 commit】

通过log 我们可以查到,最近一次提交push的 记录ID为:2890531。

可以通过 命令:git reset 进行回退,可以有两种实现方式:

git reset –-soft  具体想回退的版本号
git reset –-hard 具体想回退的版本号

前者-soft 表示只是改变了HEAD的指向,本地代码不会回退发生变化,使用git status命令可以看到,同时也可以git commit提交。后者-hard直接会改变本地源码,不仅仅指向变化了,代码也会回退到第2次commit push后的状态,所以使用时要格外细心,必要时可以先 stash 当前代码,后面可以恢复unstash再次使用。

git reset --hard【这里采用 --hard 演示】

huilong-MackPro:dragon zhanghuilong$ git reflog
2890531 (HEAD -> develop, origin/develop) HEAD@{0}: commit: 第3次 commit
82056bb HEAD@{1}: commit: 第2次 commit
23c83d0 HEAD@{2}: commit: 第一次 commit
d3fa4ea HEAD@{3}: commit (amend): add getbyId method
5fa550c HEAD@{4}: commit: add get method
fc4e425 HEAD@{5}: commit: add get method
8ce1301 HEAD@{6}: commit: add find method
1f237ea HEAD@{7}: commit: add a method
78971d4 (origin/master, origin/HEAD, master) HEAD@{8}: checkout: moving from master to develop
78971d4 (origin/master, origin/HEAD, master) HEAD@{9}: clone: from https://github.com/hrsstd/dragon.git
huilong-MackPro:dragon zhanghuilong$ git reset --hard 82056bb
HEAD is now at 82056bb 第2次 commit
huilong-MackPro:dragon zhanghuilong$ 

如果你再执行一次 git reflog 就会看到 所有变更记录,例如:

huilong-MackPro:dragon zhanghuilong$ git reflog
82056bb (HEAD -> develop) HEAD@{0}: reset: moving to 82056bb
2890531 (origin/develop) HEAD@{1}: commit: 第3次 commit
82056bb (HEAD -> develop) HEAD@{2}: commit: 第2次 commit
23c83d0 HEAD@{3}: commit: 第一次 commit
d3fa4ea HEAD@{4}: commit (amend): add getbyId method
...

2.重新push 远程分支

正常情况你会遇到以下提示:
这个是我用idea 工具直接提交的提示语

Push rejected: Push to origin/develop was rejected

如果在控制台使用命令的话会更详细:重点是这句话
because the tip of your current branch is behind
提交失败,因为当前分支的版本低于远程分支的版本,所以要想覆盖掉它,可以使用force

huilong-MackPro:dragon zhanghuilong$ git push origin develop
To https://github.com/hrsstd/dragon.git
 ! [rejected]        develop -> develop (non-fast-forward)
error: failed to push some refs to 'https://github.com/hrsstd/dragon.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: 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.
huilong-MackPro:dragon zhanghuilong$ 

3.正确操作: git push origin 分支名 --force

huilong-MackPro:dragon zhanghuilong$ git push origin develop --force
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/hrsstd/dragon.git
 + 2890531...82056bb develop -> develop (forced update)
huilong-MackPro:dragon zhanghuilong$ 

4.结果对比

撤销前的GitHub状态显示:
在这里插入图片描述

撤销后的状态:
在这里插入图片描述

### 回答1: 你可以使用下面的命令将本地分支推送到远程分支: ``` git push <远程主机名> <本地分支名>:<远程分支名> ``` 其中,远程主机名指的是你在本地配置的远程仓库地址的简写,本地分支名是你要推送的分支名称,远程分支名是你要推送到远程仓库的分支名称。 例如,如果你要将本地的`master`分支推送到远程仓库`origin`的`master`分支上,可以使用以下命令: ``` git push origin master:master ``` 如果远程仓库中不存在该分支,则会自动创建该分支并将本地分支推送到远程仓库。如果远程仓库中已经存在该分支,则会将本地分支合并到远程分支上。 ### 回答2: 要将本地代码推送到远程分支,首先需要完成以下步骤: 1. 确保已经将本地仓库与远程仓库关联。可以通过使用以下命令查看远程仓库信息:git remote -v。如果没有任何输出,则表示未关联。 2. 使用以下命令将本地代码推送到远程分支git push <远程仓库名称> <本地分支名称>:<远程分支名称> 这里,远程仓库名称代表远程仓库的别名,可以使用 git remote -v 命令查看。本地分支名称代表要推送的本地分支名称。远程分支名称代表要将本地分支推送到的远程分支名称。 举个例子,假设要将本地master分支推送到远程origin仓库的master分支,可以使用以下命令: git push origin master:master 3. 如果在远程仓库上已经存在同名分支,则会将本地代码更新到该远程分支上。如果不存在同名分支,则会在远程仓库上创建一个新的分支,并将本地代码推送到新分支上。 4. 在推送代码之前,如果远程分支已经有了其他人的提交,需要先进行代码合并。可以使用 git pull 命令更新本地代码并解决冲突,然后再执行 git push 进行推送。 需要注意的是,只有具有写权限的用户才能推送代码到远程仓库。推送完成后,其他用户可以通过 git pull 命令获取最新的代码。 ### 回答3: 使用Git工具中的push命令将本地分支推送到远程分支时,需要遵循以下步骤: 1. 首先,将本地仓库和远程仓库链接起来。可以使用命令`git remote add origin 远程仓库地址`,其中远程仓库地址通常是在远程Git仓库中提供的。 2. 检查当前分支是否与远程仓库中的分支名称相匹配。可以使用命令`git branch -a`来查看所有可用的本地和远程分支。 3. 如果当前分支远程仓库的分支名称不匹配,可以切换到正确的本地分支。可以使用命令`git checkout 分支名称`来切换分支。 4. 在确保当前分支正确后,使用`git push origin 本地分支名称:远程分支名称`的命令将本地分支推送到远程分支。在这个命令中,origin表示远程仓库的名称,本地分支名称表示要推送的本地分支的名称,远程分支名称表示要推送到的远程分支的名称。 5. 确认推送后,使用`git branch -a`命令再次检查远程仓库中的分支,确保推送成功。 总结一下,通过以上步骤,我们可以使用`git push`命令将本地分支推送到远程仓库中的特定分支。这样,其他开发人员就可以看到你的更改并进行协同工作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值