Git:将文件添加到旧提交中,作为新分支的父级已经合并回来?
Git: add file to old commit being parent of a new branch already merged back?
给定以下 git 日志,我如何将文件(在任何提交中都不存在)添加到提交 B,以便这个新文件将出现在 A 的所有其他提交中?
A --> B -----> D ------> F
\--> C --> E --/
在我使用 git rebase --onto 的尝试中,我没有成功地不必基本上复制每个修改内容的提交,但我确信我没有使用 [=20 的全部功能来接近它=].有帮助吗?
注意:远程可以强制执行,甚至可以删除并重新推送,不用担心。
非常感谢
最终结果将是:复制所有提交。
不过,关于实现方法,您可以使用 git rebase
和一些选项:
# -i for --interactive
# -r for --rebase-merges
git rebase -i -r A
git
将为您打开一个文本编辑器,要求您描述每次提交要执行的操作。
在该文件中:
- 找到提到提交的行
B
- 将操作从
pick
更改为 edit
- 保存并退出
git
将开始应用您指示他执行的脚本,并在到达 B
后暂停。
此时,您可以添加额外的文件:
git add
你要的文件
git commit --amend
将其添加到 B
git rebase --continue
继续变基
这应该重写 B
之后的所有提交。
您可以查看您的本地历史记录,以及您提交的内容,
如果您对结果满意,您可以 push --force
.
git filter-branch
可能会有帮助。它可以一次重写一系列提交。从你的笔记中,我认为你已经意识到了潜在的问题。提交重写共享历史(不同的哈希等)
注意。在尝试之前创建一个备份副本不会有什么坏处:)
git filter-branch \
--index-filter 'cp /path/to/new/file path/in/repo && git add path/in/repo/file' \
-- A..F
这会将过滤器应用于从 F
可访问的所有提交,但排除可从 A
访问的任何提交(换句话说:排除 A
及其所有祖先)
给定以下 git 日志,我如何将文件(在任何提交中都不存在)添加到提交 B,以便这个新文件将出现在 A 的所有其他提交中?
A --> B -----> D ------> F
\--> C --> E --/
在我使用 git rebase --onto 的尝试中,我没有成功地不必基本上复制每个修改内容的提交,但我确信我没有使用 [=20 的全部功能来接近它=].有帮助吗?
注意:远程可以强制执行,甚至可以删除并重新推送,不用担心。
非常感谢
最终结果将是:复制所有提交。
不过,关于实现方法,您可以使用 git rebase
和一些选项:
# -i for --interactive
# -r for --rebase-merges
git rebase -i -r A
git
将为您打开一个文本编辑器,要求您描述每次提交要执行的操作。
在该文件中:
- 找到提到提交的行
B
- 将操作从
pick
更改为edit
- 保存并退出
git
将开始应用您指示他执行的脚本,并在到达 B
后暂停。
此时,您可以添加额外的文件:
git add
你要的文件git commit --amend
将其添加到B
git rebase --continue
继续变基
这应该重写 B
之后的所有提交。
您可以查看您的本地历史记录,以及您提交的内容,
如果您对结果满意,您可以 push --force
.
git filter-branch
可能会有帮助。它可以一次重写一系列提交。从你的笔记中,我认为你已经意识到了潜在的问题。提交重写共享历史(不同的哈希等)
注意。在尝试之前创建一个备份副本不会有什么坏处:)
git filter-branch \
--index-filter 'cp /path/to/new/file path/in/repo && git add path/in/repo/file' \
-- A..F
这会将过滤器应用于从 F
可访问的所有提交,但排除可从 A
访问的任何提交(换句话说:排除 A
及其所有祖先)