将所有提交合并为一个,然后重新设置基准

时间:2018-08-03 02:24:51

标签: git git-merge rebase

我有一个本地/远程分支我只在工作。 BranchA是从develop分支创建的。我在某个地方做出了类似的承诺。现在,我处于一个阶段,我想从开发中同时提取所有所做的更改,以便BranchA包含开发中的所有最新更改,以便可以对其进行测试。

我试图将开发基础重新部署到BranchA,但是解决冲突有点困难。发生的事情是在开发人员分支中有一个FileA被更改,但是我在很多提交中也更改了该文件(假设8)。因此,似乎git要求我解决此文件的冲突8次,而我只想问我最新版本。

那么,我在这里有什么选择?我应该将所有的12个提交合并为1个,然后尝试重新设置基准吗?我将如何正确地做到这一点?

2 个答案:

答案 0 :(得分:1)

我不确定这里最好的操作方法是什么(通常是由偏好/策略决定的),但是如果您想进行基准调整并将所有提交压缩为一个,则可以执行以下操作:

app.get("/myapi", (request, response) => {
  response.set("Cache-Control", "public, max-age=300, s-max-age=2629746");
  var myparam = request.query.item;
    return fetchSomethingFromFirestore(myparam).then((resp) => {
        return response.render("template", {
          myProperty: resp.valueForPugTemplate
        });
    });
});

app.use(function(err, req, res, next) {
  return errorhandler(err, req, res, next);
});

const myapi = functions.https.onRequest((request, response) => {
  if (!request.path) {
    request.url = `/${request.url}`;
  }
  return app(request, response);
});
module.exports = {
  myapi,
};

这将打开一个编辑器,其中对git checkout develop git rebase -i BranchA 中不存在的develop上的每个提交都添加一行。

此编辑器中的说明概述了您可以执行的操作,但是在这种情况下,您可以:

  • 将最上面的(第一个)提交操作保留为BranchA
  • 将所有其他提交操作更改为picksquash

fixupsquash之间的区别在于,squash将压缩的提交的所有提交消息连接在一起,并允许您编辑此提交消息,而fixup仅使用提交的消息,其他人“固定”到的提交消息,不允许您对其进行编辑。

通常,我倾向于使用fixup至少保留一些提交历史,但是这完全取决于我的分支到那时为止的状态。

答案 1 :(得分:1)

  

我试图将开发基础重新部署到BranchA

否:您需要将分支重新建立到通用分支开发上

git checkout BranchA
git rebase develop

如果相似的合并冲突多次出现,请git rerere can help

另一种方法就是将develop合并到BranchA中。

  

关键是我想将来自新开发提交的FileA更改添加到我的BranchA的FileA的最新版本中。

对于给定的文件,您可以简单地在冲突阻止重新设置基准后将其检出:

 git checkout develop -- FileA
 git rebase --continue

这样,解析速度非常快(因为您用develop分支中的文件覆盖了FileA)