我通过git pull将代码提交到github项目并且工作正常:https://github.com/ivaldi/brimir/pull/245
现在我正在提交新的更改,但拉动还包括上一次提交的所有提交:https://github.com/ivaldi/brimir/pull/257
维护者希望我在合并之前清理提交,但是我该怎么做?
编辑:我不明白的一件事是,在我的pull请求中,我提交了主分支中已存在的哈希值。如何让我的提交知道提交已经在主人中?编辑2:我想我知道问题出在哪里,我从我的第一次更改中取出了更改,因为他们尚未被主人接受。我还从我的第一个分支中取出了来自master origin的更改,所以现在它想要将已经存在的提交推送到origin master。
答案 0 :(得分:1)
所以你要做的就是提交一个只包含新提交的master
分支的pull请求,即那些不在你上一次pull请求中的提交。我们假设您之前提取请求的最后一次提交是提交A
,并且包含您最新更改的分支是add_users_crud_to_api
。在这种情况下,您想要:
master
。如果您不确定如何操作,请参阅here。git branch newbranchname add_users_crud_to_api
。master
:git rebase --onto master A newbranchname
(请记住,A
是您成功提取请求的最后一次提交的任何内容。)现在newbranchname
将从master分支出来,并且只包含新的提交(即下一个pull请求的提交)。因此,您可以继续推送它并使用该分支执行拉取请求。
好的,出于好奇,我看了看你的回购,我注意到你因为某种原因将master
合并到了你的功能分支(add_users_crud_to_api
)。重新定位并不适用于合并(并且无论如何都不应该进行合并)。据我所知,你的拉取请求中只需要2个新的提交,所以我只想挑选它们:
git checkout master -b add_users_crud_to_api2
git cherry-pick ef9f73d
git cherry-pick eabcdc6
然后您可以提交add_users_crud_to_api2
的提款请求。
答案 1 :(得分:0)
维护者希望我在合并之前清理提交,但是我该怎么做?
明显的答案:问维护者,而不是我们。
其他明显的答案:做出尽可能干净的提交;即从您希望维护者提取您的更改(可能是主数据)的分支的当前状态进行更改,而不是您自己的修改代码。
答案 2 :(得分:0)
维护者希望我在合并之前清理提交,但是我该怎么做?
你应该做壁球
为了做一个git squash,请按照以下步骤操作:
// X is the number of commits you wish to squash, in your case 6
git rebase -i HEAD~X
一旦你压缩你的提交 - 选择s
进行squash =它会将所有提交合并为一个提交。
如果需要,您还有--root
标志
尝试:git rebase -i --root
- root
Rebase all commits reachable from <branch>, instead of limiting them with
an <upstream>.
This allows you to rebase the root commit(s) on a branch.
When used with --onto, it will skip changes already contained in `<newbase>`
(instead of `<upstream>`) whereas without --onto it will operate on every
change. When used together with both --onto and --preserve-merges, all root
commits will be rewritten to have `<newbase>` as parent instead.`