【问题标题】:Git pull to indexGit 拉取索引
【发布时间】:2011-06-06 03:04:39
【问题描述】:

有没有办法将远程更改拉到索引而不是直接创建新提交?

理想情况下,它就像应用带有远程内容的补丁,但不修改您的本地历史记录。

谢谢

【问题讨论】:

    标签: git merge


    【解决方案1】:

    我不太确定您的预期工作流程是什么,但您可以在不影响当前分支或索引的情况下获取远程更改。

    git fetch
    

    然后,您可以将获取的更改合并到当前索引中,而无需设置合并提交,但这是一件相当晦涩且不寻常的事情。

    git read-tree -m HEAD origin/remote-branch
    

    如果远程分支是您当前 HEAD 的快进,则两树版本是最好的,如果不是,那么三路合并选项可能会更好。

    git read-tree -m $(git merge-base HEAD origin/remote-branch) HEAD origin/remote-branch
    

    阅读git read-tree 的手册页,了解有关差异的详细信息。

    【讨论】:

      【解决方案2】:

      问题将是下一次您拉取远程更改,它应该从远程历史的哪个点生成补丁?这正是merging要解决的问题,merge commit表明了到目前为止你的本地分支应用了哪个远程版本。

      话虽如此,如果您执行git fetchgit merge --no-commit,则合并将在您的工作区(和索引)中完成但未提交,并且元数据将处于一种状态,以便在您提交时,它将被标记为合并提交。这是你需要的吗?

      【讨论】:

      • 我怀疑这是 OP 真正想要的(合并到索引 工作树,但不提交)。请注意,您可以只做pull --no-commit;它已传递给merge
      【解决方案3】:

      git fetch 将从远程获取更改,但不会将其与您的master 分支合并。它将在远程跟踪分支中。然后,您可以手动合并它。 git pull 同时执行这两个操作。

      【讨论】:

        【解决方案4】:

        我一直访问此页面并错过正确答案,因为它在评论中。

        git-pull --no-commit git@github.com:username/project.git
        

        【讨论】:

          【解决方案5】:

          看看this answer。您可能需要调整配置以避免合并提交。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-07-08
            • 2014-04-30
            • 1970-01-01
            • 2016-09-18
            • 2020-06-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多