我不确定我是如何陷入这种情况的,但我即将向Github中的回购提交拉动请求,但我发现拉动请求包括一堆其他提交(15)到另一个与分支无关的文件。
我要保留的文件名为tuition_benefit.json
,我不想要的文件称为employees.json
。如何从我的分支中删除与employees.json
相关的所有提交,以便在拉取请求中不考虑它们?
当我创建新分支(employees.json
)来创建这个新文件{{1>时,我认为我必须在与employees
文件(benefits-query
)相关的分支上而不是tuition_benefit.json
。
我只在这个新分支上做了3次提交,而另外15个在pull请求中指定的都与另一个文件相关,我从未在这个分支上修改过。
答案 0 :(得分:4)
但是我发现pull-request包含一堆其他提交(15)到另一个与分支无关的文件。
这可能表示您在其他分支的顶部打开了分支,或者您有一个本地修改的master
分支并从中分支。
无论哪种方式,您的存储库都是这样的。
A - B - C [origin/master]
\
D - E - F [others]
\
G - H - I [yours]
您可以使用git log --decorate --graph
来查看此内容。
origin/master
是master
分支,因为它看起来在上游。 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将替换yours
和origin/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()