拉取请求包含来自 master 的提交

Max*_*ler 4 git github pull-request

一周前我从 master 分支出来。

master -> my_branch_1
Run Code Online (Sandbox Code Playgroud)

在此期间,我多次做出承诺my_branch_1并重新调整origin/master以跟上。

ATM 分支机构状况(概念化)

commit0
master -> my_branch_1

master:
   commit1
   commit3
   commit10

my_branch_1 (commits from master are marked with *)
   commit1*
   commit2
   commit3*
   commit4...commit9
   commit10
Run Code Online (Sandbox Code Playgroud)

当我尝试将 PR 打开回master. PR 日志显示所有提交,而我预计只会出现1...10提交。2, 4...9

  1. 我做错了什么?
  2. 我应该如何解决这个问题?

- 编辑 -

origin评论中的讨论进行澄清。目的是将 master 上发生的提交接收到我的分支中。

这是期望的结果,因为我希望尽可能接近“ master”,以与代码库的其余部分保持同步。

我不想让这些提交已经出现master在我正在执行的 PR 中master

-- 编辑 2 --

此问题与托管在 GitHub 上的私人存储库有关。不是分叉的回购协议。

Cal*_*leb 5

我做错了什么?

听起来你是从而origin/master不是重新调整基础,至少是为了得到commit3

我应该如何解决这个问题?

首先,从您的分支创建一个备份分支,以防万一搞砸了。您只需从当前分支创建一个新分支即可做到这一点。例如,如果您在您正在工作的分支机构中,您可以:

git checkout -b my_branch_1_backup
Run Code Online (Sandbox Code Playgroud)

创建一个新分支,然后checkout返回到您的工作分支:

git checkout my_branch_1
Run Code Online (Sandbox Code Playgroud)

其次,再次变基。我首先进行交互式变基并删除您不想要的提交。使用该-i标志以交互方式变基,例如:

git rebase -I commit1
Run Code Online (Sandbox Code Playgroud)

这将为您提供commit1可以编辑的提交列表,例如:

pick commit2
pick commit3
pick commit4
Run Code Online (Sandbox Code Playgroud)

等等。如果您不想commit3(因为它已经在 中master),请更改pick commit3drop commit3. 您的编辑器的评论中将列出其他选项。确定好提交列表后,保存并退出编辑器,然后执行以下操作:

git log
Run Code Online (Sandbox Code Playgroud)

您应该看到日志反映了您的更改。

最后,您可以变基到origin/master,这将使 git 获取任何新的提交master,然后将您的提交添加到来自 的提交之上master

git rebase origin/master
Run Code Online (Sandbox Code Playgroud)

再次检查日志,您应该会master在日志中看到提交,但在您在分支中添加的提交之前。

此时,您的拉取请求应仅包含您在分支中添加的提交。