GitHub pull请求显示已经在目标分支中的提交

时间:2013-04-30 17:51:29

标签: git github merge commit pull-request

我正在尝试将GitHub上的pull请求检查到非master的分支。目标分支在master之后,pull请求显示master的提交,所以我合并master并将其推送到GitHub,但是它们的提交和差异仍然在刷新后出现在pull请求中。我加倍检查GitHub上的分支是否有来自master的提交。为什么他们仍然出现在拉动请求中?

我还在本地检查了pull请求,它只显示了未合并的提交。

13 个答案:

答案 0 :(得分:73)

看起来Pull Request没有跟踪目标分支的变化(我联系了GitHub支持,并于2014年11月18日收到回复,说明这是设计的。)

但是,您可以通过执行以下操作让它向您显示更新的更改:

http://githuburl/org/repo/compare/targetbranch...currentbranch

根据需要替换githuburlorgrepotargetbranchcurrentbranch

或者正如在他的回答中指出的hexsprite,您也可以通过单击PR上的 Edit 并临时将基数更改为其他分支并再次返回来强制更新。这会产生警告:

  

您确定要更改基础吗?

     

旧基础分支的一些提交可能会被删除   时间表,旧的评论评论可能会过时。

PR中的leave two log entries

enter image description here

答案 1 :(得分:38)

这是一个很好的解决方法。在GitHub中查看PR时使用Edit按钮将基本分支更改为master以外的其他分支。然后将其切换回master,现在它将正确显示最近提交的更改。

答案 2 :(得分:17)

总而言之,GitHub不会在拉取请求中自动重新设置提交历史记录。最简单的解决方案是:

解决方案1:重新基础

假设您要从master合并到feature-01

git fetch origin
git checkout feature-01
git rebase origin/master
git push --force

如果您正在使用分叉,则可能需要将上面的origin替换为upstream。请参阅 How do I update a GitHub forked repository? 以了解有关跟踪原始存储库的远程分支的详细信息。

解决方案2:创建新的拉取请求

假设您要合并来自master的简介feature-01

git checkout feature-01
git checkout -b feature-01-rebased
git push -u origin feature-01-rebased

现在打开feature-01-rebased的拉取请求,然后关闭feature-01

的请求

答案 3 :(得分:13)

解决此问题的一种方法是在PR中git rebase targetbranch。然后git push --force targetbranch,然后Github将显示正确的提交和差异。如果你不知道自己在做什么,请小心。也许先检查一个测试分支,然后再进行git diff targetbranch以确保它仍然是你想要的。

答案 4 :(得分:8)

对于其他遇到此问题且被GitHub Pull Request行为混淆的人,根本原因是PR是源分支提示与源分支和目标分支的共同祖先的差异。因此,它将显示源分支上的所有更改,直到共同的祖先,并且不会考虑目标分支上可能发生的任何更改。

此处提供了更多信息:https://developer.atlassian.com/blog/2015/01/a-better-pull-request/

基于共同祖先的差异似乎很危险。我希望GitHub可以选择制作一个更标准的3向合并PR。

答案 5 :(得分:7)

您需要将以下内容添加到~/.gitconfig文件中:

[rebase]
    autosquash = true

这将自动实现与this answer显示的相同。

我是从here得到的。

答案 6 :(得分:2)

当您从目标分支合并合并提交时,在GitHub上会发生这种情况。

我一直在使用壁球并与Github合并作为默认的合并策略,包括来自目标分支的合并。这引入了一个新的提交,并且GitHub无法识别此压缩的提交与已经在master中的提交相同(但是具有不同的哈希值)。 Git可以正确处理它,但是您会在GitHub上再次看到所有更改,这很烦人。解决方案是对这些拉入的上游提交进行定期合并,而不是压缩合并。如果您想将另一个分支作为一个依赖项合并到您的分支中,请git merge --squash并还原该单个提交,然后再将另一个分支实际转移到master之前从master提取。

答案 7 :(得分:2)

使用 2-dot url 代替 3-dot url 进行比较

代替

http://githuburl/org/repo/compare/targetbranch...currentbranch

使用

http://githuburl/org/repo/compare/targetbranch..currentbranch

答案 8 :(得分:0)

我不完全确定这背后的理论。但是我多次这样做了,并且能够通过以下方式解决这个问题。

git pull --rebase

这将从原始repo master分支获取并合并更改(如果你有指向那个)

然后,您将更改强制推送到github克隆的存储库(目标)

git push -f origin master

这将确保您的github克隆和您的父repo处于相同的github提交级别,并且您没有看到跨分支的任何不必要的更改。

答案 9 :(得分:0)

一一尝试以下命令。

CREATE OR REPLACE FUNCTION FUNCTION_NAME
   RETURN SYS_REFCURSOR
IS
   l_return   SYS_REFCURSOR;

    CURSOR c_operations IS
        SELECT * FROM TABLE1
        WHERE STATUS != 'OK'
        FOR UPDATE OF TABLE1.STATUS;

BEGIN

    FOR r_operation IN c_operations
    LOOP

        UPDATE
            TABLE1
        SET
            TABLE1.STATUS = 'OK'
        WHERE
            TABLE1.ID_TABLE1 = r_operation.ID_TABLE1;

    END LOOP;

    COMMIT;      

    -- Missing conversion from cursor to sys_refcursor

    RETURN l_return;

END;

答案 10 :(得分:0)

我找到了一种正确行为的方法(在2020年11月进行了测试)。

git merge --continue和解决冲突之后,需要使用git commit ...而不是 using System; namespace ProgExer19 { class Program { public static void Main(string[] args) { int n1 = 0, n2 = 0; int i = 0; do { n1 = n2; Console.Write("ENTER NUMBER: "); n2 = int.Parse(Console.ReadLine()); i++; } while (n2 != (n1 * 2) || i <= 1); Console.WriteLine("Program will now terminate."); System.Threading.Thread.Sleep(1000); } } }

答案 11 :(得分:0)

我怀疑 GithHub 中存在一些刷新问题。下面的 hack 对我有用。

  1. 点击 PR 上的编辑
  2. 将基础分支从当前分支(比如开发)更改为不同的分支(比如主分支),然后点击保存
  3. 现在通过将基础分支从更改的分支(例如 master)更改为不同的分支(例如开发)来恢复更改,然后点击保存

现在提交将正确显示。

default Admin SDK scopes

答案 12 :(得分:-1)

如果您太担心将事情弄糟,则采用故障安全方法: 转到文件并手动删除更改,然后使用

进行最后一次提交
git add .  && git commit -a --allow-empty-message -m '' && git reset --soft HEAD~2 &&
git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1})"

我没有冲突,你很好!