Git实用技巧 pull request修改

Posted iotisan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git实用技巧 pull request修改相关的知识,希望对你有一定的参考价值。

1 问题描述

在 github 上提交了一个 pull request,在作者进行操作前,发现自己某处错了,进行了修改。

这时是关闭这条 pull request 重新发一条,还是有什么操作可以覆盖这次发送的 pull request?

2 解决方案

push 更新那个分支就行,pull request只和分支名绑定。

直接 push 就会自动追加到到 PR 后面。当然,如果你不希保留旧的 commit 记录,还可以选择本地 git reset 之后 push -f 强行覆盖掉你远程的commit,PR会一并更新。

3 测试实例

本能手用 gitee 做了下测试。

3.1 准备工作

twowinter创建了1个仓库:
https://gitee.com/twowinter/practice/

doublewinter fork 了这个仓库:
https://gitee.com/doublewinter/practice/

3.2 doublewinter 新增了一个笔记,发起了pull request

1.新建 double_note.txt,里面写1,push1个commit

git add double_note.txt
git commit -a -m 'add 1'
git push -u origin master

3.3 doublewinter 后悔了,其实想写入2

1.回退版本到之前的一个版本

git reset HEAD~1

2.修改 txt,里面写2,重新commit

git add double_note.txt
git commit -a -m 'add 2'

3.强制push这个新的commit

此时如果你 git push,会有错误提示,因为远程版本库还是commit 1的内容。

$ git push -u origin master
To https://gitee.com/doublewinter/practice.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://gitee.com/doublewinter/practice.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.

因此需要强制push。

git push -f

这时去twowinter那边,可以看到pull request 也同步到这个新的commit了,原来的内容1没了。

4 github实战 - Alios

好了,自己内部测试好了之后,就可以到github上实战了。

最近有个项目用到了 AliOS 的 SAL,发现在驱动 BC95 时,数据发送没有传递到AT命令接口。这是华为 Boudica 120 封装了发送时才指定目的地址信息的AT命令,导致市面上基于该芯片的方案都采用了这种方式。

于是本能手就很激动地提交了pull request,但由于SAL代码仅在项目代码中用到,提交中出现了两次编译的低级错误。如图:

为了让我的PR的代码尽量直观,避免干扰别人对这个PR的查看。我想要重新整理下这个commit。

第一步,回退两个版本。

$ git reset HEAD~2
Unstaged changes after reset:
M       device/sal/sal_sockets.c

第二步,修改正确的代码,并提交。

第三步,强制提交。

$ git push -f
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 676 bytes | 676.00 KiB/s, done.
Total 5 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
To https://github.com/twowinter/AliOS-Things.git
 + 557b9189...32e7c038 master -> master (forced update)

回到网页上,刷新瞧一瞧,果真修改掉了。

End

That’s all


以上是关于Git实用技巧 pull request修改的主要内容,如果未能解决你的问题,请参考以下文章

《Git与Github使用笔记》第12章 Pull Request的使用

GitHub配置账号Pull Request更新代码分支

github 修改fork的代码之后如何提交代码并pull request

GitHub配置账号Pull Request更新代码分支

GitHub配置账号Pull Request更新代码分支

VSCode开启Pull Request更新代码分支可视化新篇章