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

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、付费专栏及课程。

余额充值