如何从我没有修改

时间:2018-05-10 22:41:36

标签: git github

我不确定我是如何陷入这种情况的,但我即将向Github中的回购提交拉动请求,但我发现拉动请求包括一堆其他提交(15)到另一个与分支无关的文件。

我要保留的文件名为tuition_benefit.json,我不想要的文件称为employees.json。如何从我的分支中删除与employees.json相关的所有提交,以便在拉取请求中不考虑它们?

当我创建新分支(employees.json)来创建这个新文件{{1>时,我认为我必须在与employees文件(benefits-query)相关的分支上而不是tuition_benefit.json

我只在这个新分支上做了3次提交,而另外15个在pull请求中指定的都与另一个文件相关,我从未在这个分支上修改过。

1 个答案:

答案 0 :(得分:4)

  

但是我发现pull-request包含一堆其他提交(15)到另一个与分支无关的文件。

这可能表示您在其他分支的顶部打开了分支,或者您有一个本地修改的master分支并从中分支。

无论哪种方式,您的存储库都是这样的。

A - B - C [origin/master]
         \
          D - E - F [others]
                   \
                    G - H - I [yours]

您可以使用git log --decorate --graph来查看此内容。

origin/mastermaster分支,因为它看起来在上游。 yours是您要提交的分支。 others表示您从yours分支的内容;这可能是您本地修改的master或其他分支。只有提交G - H - I与您的公关相关。

你想要的是你的作品从origin/master分支出来。

          G - H - I [yours]
         /
A - B - C [origin/master]
         \
          D - E - F [others]

您可以使用rebase在G - H - I之上重播origin/master来完成此操作。但是一个简单的git rebase origin/master是行不通的。如果您这样做,Git将替换yoursorigin/master之间的所有内容,包括来自D - E - F others的{​​{1}}。你需要告诉它忽略D - E - F。您可以使用git rebase --onto <from> <to>执行此操作。

git rebase --onto origin/master others yours

这将使所有提交从others开始,但不包括yours以及最多(包括)origin/master,并将其重写为G - H - I。那是 G1 - H1 - I1 [yours] / A - B - C [origin/master] \ D - E - F [others] 。然后你就会有这个。

G1 - H1 - I1

请注意它是rebase。这是因为git push不会重写历史记录,因此会创建新的历史记录。这些都是新的提交。当您尝试yours时,它将被拒绝,因为这不是git push --force的简单更新。你必须git fetch

总之......

  • origin/master(获取最新的git checkout yours)。
  • git log --decorate --graph
  • 检查git rebase --onto origin/master <last commit that's not yours> yours以确定您的工作开始。
  • git push --force
  • 测试。
  • np.copy()