git branches的问题

时间:2016-02-01 10:18:50

标签: git branch commit pull

我通过git pull将代码提交到github项目并且工作正常:https://github.com/ivaldi/brimir/pull/245

现在我正在提交新的更改,但拉动还包括上一次提交的所有提交:https://github.com/ivaldi/brimir/pull/257

维护者希望我在合并之前清理提交,但是我该怎么做?

编辑:我不明白的一件事是,在我的pull请求中,我提交了主分支中已存在的哈希值。如何让我的提交知道提交已经在主人中?

编辑2:我想我知道问题出在哪里,我从我的第一次更改中取出了更改,因为他们尚未被主人接受。我还从我的第一个分支中取出了来自master origin的更改,所以现在它想要将已经存在的提交推送到origin master。

3 个答案:

答案 0 :(得分:1)

所以你要做的就是提交一个只包含新提交的master分支的pull请求,即那些不在你上一次pull请求中的提交。我们假设您之前提取请求的最后一次提交是提交A,并且包含您最新更改的分支是add_users_crud_to_api。在这种情况下,您想要:

  1. 确保您的前叉具有最新版本的master。如果您不确定如何操作,请参阅here
  2. 创建一个新分支,指向与您的最新更改相同的提交:git branch newbranchname add_users_crud_to_api
  3. 将所有新提交重播到mastergit rebase --onto master A newbranchname(请记住,A是您成功提取请求的最后一次提交的任何内容。)
  4. 现在newbranchname将从master分支出来,并且只包含新的提交(即下一个pull请求的提交)。因此,您可以继续推送它并使用该分支执行拉取请求。

    编辑1

    好的,出于好奇,我看了看你的回购,我注意到你因为某种原因将master合并到了你的功能分支(add_users_crud_to_api)。重新定位并不适用于合并(并且无论如何都不应该进行合并)。据我所知,你的拉取请求中只需要2个新的提交,所以我只想挑选它们:

    1. git checkout master -b add_users_crud_to_api2
    2. git cherry-pick ef9f73d
    3. git cherry-pick eabcdc6
    4. 然后您可以提交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 =它会将所有提交合并为一个提交。

enter image description here

如果需要,您还有--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.`