【问题标题】:Extract out changes to single file in a range of git commits在一系列 git 提交中提取对单个文件的更改
【发布时间】:2011-07-16 20:16:12
【问题描述】:

我使用的构建系统通常要求在执行完整构建之前将项目数据提交到本地存储库。这——连同我经常提交并在推送到公共仓库之前重新设置基准的习惯——意味着我通常在远程头顶上有一堆提交。他们中的大多数都有像“s”这样的提交消息,因为我知道他们会被压扁。

我在这里遇到的情况是自动执行重新设置提交列表的步骤之一。我知道我对某个文件所做的所有更改都不应该推送到公共存储库,我正在寻找一种方法来编辑每个提交,以便将对该文件的更改拆分为单独的提交,稍后我将压缩这些提交变基。

例如,如果源是 HEAD,那么这是我在顶部的提交:

* 6f42745 (HEAD, master-dave) s
* b33bc68 s
* 0b787e8 s
* 3d47e9e s
* ae45dec brought pkg up-to-date with master branch
* dd87ec1 s
* 96fd4ef DD: dave dev
* 422cf73 (origin/master, master) Add missing build scripts.

我想遍历 master..master-dave 的所有提交,提取 更改为 ./file.txt,给我:

* 6f42745 (HEAD, master-dave) s
* ------- DD (changes to file.txt)
* b33bc68 s
* ------- DD (changes to file.txt)
* 0b787e8 s
* ------- DD (changes to file.txt)
* 3d47e9e s
* ae45dec brought pkg up-to-date with master branch
* dd87ec1 s
* 96fd4ef DD: dave dev
* 422cf73 (origin/master, master) Add missing build scripts.

最后,我会运行 git rebase -i origin/master, squash all "DD" 一起提交,所有 "s" 提交到 "brought pkg up-to-date with master branch", 重新排序,更新master,然后推送到原点,最后得到:

* ------- (HEAD, master-dave) DD: dave dev
* ------- (origin/master, master) brought pkg up-to-date with master branch
* 422cf73 Add missing build scripts.

我很确定答案在于 git filter-branch,但我不知道怎么做。


编辑:

  • --autosquash 修复了“s”提交的烦恼,但这不是主要问题。我仍然不知道如何将更改拆分到特定文件,这必须发生在 我压缩它们之前。
  • smudge/clean 过滤器很漂亮,但我不做关键字替换,而且我不认为我想在我的个人分支上维护的更改足够可预测以编写脚本。我认为我总是必须比公共 master 至少提交一次。

【问题讨论】:

标签: git git-rebase git-filter-branch


【解决方案1】:

http://technosorcery.net/2010/02/07/fun_with_the_upcoming_1.7_release_of_git_rebase_--interactive_--autosquash.html

这应该会告诉您如何进行自动压缩。不要用 s 标记提交,而是用 !squash 标记它。

看起来您应该为所有 DD 提交维护自己的分支。然后只需管理与主分支的合并。

如果您要排除的文件更改是由于环境设置引起的,请查看 smudge/clean 脚本。这将使您能够提交对该文件的相关更改,并省略任何仅适用于您的环境的更改。这通常是从一个开发人员到另一个开发人员不同的数据库连接字符串。

看这里:http://progit.org/book/ch7-2.html

【讨论】:

  • 我不知道 --autosquash。从现在开始我将使用它。但这并没有解决我最初的问题,即如何从一系列提交中自动拆分对特定文件的更改。
猜你喜欢
  • 1970-01-01
  • 2016-04-17
  • 2015-09-01
  • 2010-11-09
  • 2010-10-04
  • 1970-01-01
  • 2012-04-27
  • 2011-08-17
  • 1970-01-01
相关资源
最近更新 更多