如果我想要合并到一个Git分支中,在一个特定的提交中只对一些文件进行了更改,其中包括对多个文件的更改,那么如何实现呢?
假设名为stuff的Git提交对文件A、B、C和D进行了更改,但我只想合并stuff对文件A和B的更改。这听起来像是git cherry-pick的工作,但<代码>D9只知道如何合并整个提交,而不是文件的子集。
发布于 2011-04-19 22:04:57
我会用cherry-pick -n (--no-commit)来做这件事,它允许你在提交之前检查(和修改)结果:
git cherry-pick -n <commit>
# unstage modifications you don't want to keep, and remove the
# modifications from the work tree as well.
# this does work recursively!
git checkout HEAD <path>
# commit; the message will have been stored for you by cherry-pick
git commit如果绝大多数修改都是您不想要的,而不是签出单独的路径(中间步骤),您可以将所有内容重置回来,然后添加您想要的内容:
# unstage everything
git reset HEAD
# stage the modifications you do want
git add <path>
# make the work tree match the index
# (do this from the top level of the repo)
git checkout .发布于 2015-04-22 13:12:34
其他方法对我不起作用,因为提交对许多其他文件有很多更改和冲突。我想到的很简单
git show SHA -- file1.txt file2.txt | git apply -它实际上不会提交文件或为您执行add,因此您可能需要继续使用
git add file1.txt file2.txt
git commit -c SHA或者,如果您想跳过添加操作,可以使用git apply的--cached参数
git show SHA -- file1.txt file2.txt | git apply --cached -您也可以对整个目录执行相同的操作
git show SHA -- dir1 dir2 | git apply -发布于 2016-03-02 17:14:10
我通常使用-p标志和其他分支的git结账,我发现这比我遇到的大多数其他方法更容易和更细粒度。
原则上的:
git checkout <other_branch_name> <files/to/grab in/list/separated/by/spaces> -p示例:
git checkout mybranch config/important.yml app/models/important.rb -p然后你会看到一个对话框,询问你想要在"blobs“中做哪些更改,这对每一段连续的代码更改都很有效,然后你可以对每一段代码发出y (是)、n (否)等信号。
-p或patch选项适用于git中的各种命令,包括git stash save -p,它允许您选择要从当前工作中隐藏的内容
有时,当我完成了大量工作,并且希望将其分离出来,并使用git add -p在更多基于主题的提交中提交时,我有时会使用此技术,并为每次提交选择我想要的内容:)
https://stackoverflow.com/questions/5717026
复制相似问题