【问题标题】:git pull --rebase for a specific folder/filegit pull --rebase 用于特定文件夹/文件
【发布时间】:2014-12-03 11:06:15
【问题描述】:

我只想变基一个文件夹。

有没有可能做类似的事情

git pull --rebase origin/master path/to/folder/or/file.txt

只有那个路径会被更新?

【问题讨论】:

  • 我只想变基一个文件夹。不。变基只对提交有意义,而不是单个文件/文件夹。相反,您可能想要做的是在工作树中检查 path/to/folder/or/file.txt 的版本,暂存文件并在本地 master 分支上进行新的提交。
  • @jub0bs 如果提交按路径进行逻辑分组,这完全有意义

标签: git git-rebase git-pull


【解决方案1】:

快速回答是“不”。

更长的答案取决于您要完成的工作,以及您是否对要变基的任何文件/文件夹进行了任何更改,以及您是否有兴趣显示任何历史记录。

如果您的分支没有任何更改,并且您只想从 origin/master 获取最新文件并将其放在您的工作目录中,并且您不希望有任何“历史记录”所发生的事情,那你就可以了

git fetch origin master
git checkout origin/master -- path/to/file.txt 

对于任何比这更复杂的东西,它都会很快变得丑陋。

【讨论】:

    【解决方案2】:

    我的想法是这样的:

    git cherry-pick $(git log --oneline HEAD..origin/master -- path/to/something | cut -d' ' -f1 | tac| xargs echo)
    

    [编辑] 正如@CervEd 所建议的,有一种更直接的方法

    git cherry-pick $(git rev-list HEAD..origin/master -- path)
    

    【讨论】:

    • 我建议git cherry-pick $(git rev-list HEAD..origin/master -- path)
    • ofc 它不会只从该路径到cherry-pick,而是整个提交,其中可能包括其他路径。创建自己的 rebase todo 文件可能更合适
    • 很好的简化 CervEd。如果您愿意,我可以编辑答案,或者您自己回答,因为我认为您的解决方案非常出色。另外,如果您只想更改特定路径,那么您只需 git checkout -- HASH
    • 我认为它不值得一个单独的答案,最好修改这个,假设它是等效的。
    【解决方案3】:

    假设你在 master 分支上,我认为最接近你想要的是这样的:

    git checkout -b tmp_rebase_branch master
    git pull --rebase
    git checkout master
    git checkout tmp_rebase_branch -- path/to/folder/or/file.txt
    

    在一个临时分支上重新定位整个批次,然后只签出您想要移动到主分支的部分。您将获得该路径/到/文件夹/或/file.txt 的变基的内容,但不会有您的主分支的实际变基。因为 rebase 只能对提交进行。

    【讨论】:

      猜你喜欢
      • 2020-06-08
      • 2017-10-06
      • 2021-11-17
      • 2017-12-07
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 2014-10-27
      • 2013-03-14
      相关资源
      最近更新 更多