【问题标题】:Git: how to push changes made to only certain files?Git:如何推送对某些文件所做的更改?
【发布时间】:2013-04-02 23:26:13
【问题描述】:

我最近遇到了一个问题,我需要选择一些文件以使用 git 推送到远程分支。 我的具体用例是在每次提交中只创建/修改一个文件,我需要以编程方式推送选定的文件(处于最新状态)。我做了一些研究,发现我需要做的 2 个技巧:

  1. 我可以使用cherry-pick 将某些提交挑选到一个新分支中,然后将该分支合并到远程主分支中。
  2. 我可以使用 rebase -i 重新排序提交,我假设我可以重新排序,以便与这些选定文件相关的提交都在前面,我可以推送该列表中的最后一个提交。

对于cherry-pick来说,这有点令人困惑。我可以创建一个没有所有脏提交的新分支,并将文件提交选择到该分支中。但是,如果该文件已经存在于分支中,它总是会引发我必须手动修复的冲突,并不理想。

对于 rebase -i,从我读过的内容来看,我需要转到一个交互式编辑器,我需要在其中手动重新排序提交,然后我可以执行 git push origin 以将所有内容应用到 commit-SHA(其中已重新排序)。不理想,因为我必须做手工工作。

总的来说,我认为 rebase 更接近我的需要,但我找不到一种简单的方法来以编程方式完成它。谁能想出一些可以完成我任务的git类比操作?

【问题讨论】:

  • 让我直截了当地说 - 一个分支上有一堆提交需要应用到另一个分支,并且在每个提交中只有一个文件被修改。所以也许提交 1 修改了文件 A,提交 2 修改了文件 B,等等?
  • @AdamS 是的,你说的是正确的,但可能有一堆提交修改同一个文件。假设我有 C1、C2、C3、C4 和 C2 修改文件 A,其余所有修改文件 B。现在我要推送文件 B 的修改(即 C1、C3、C4)。我知道 rebase -i 可以做到这一点,但请参阅我的主要帖子(没有编程方式)。

标签: git git-rebase cherry-pick


【解决方案1】:

我想我已经找到了解决这个问题的方法:cherry-pick --strategy=recursive -Xtheirs <commit-SHA>

在递归合并策略中指定 'theirs' 选项会强制冲突以干净利落的方式自动解决,有利于正在合并的版本。这将忽略所有冲突警告,但会抓取提交中的任何内容。

我想现在我只想知道为什么cherry-pick会在选择修改当前分支中现有文件的提交时产生冲突警告,即使只是添加一行。

【讨论】:

    猜你喜欢
    • 2011-01-01
    • 2019-08-07
    • 2014-10-30
    • 2011-08-08
    • 2023-03-28
    • 2012-09-15
    • 1970-01-01
    • 2020-05-22
    • 2020-05-17
    相关资源
    最近更新 更多