合并单个文件并将更改的作者保留在git中

合并单个文件并将更改的作者保留在git中,git,Git,开发人员在其分支foo分支中进行了更改,该分支包含2个修改过的文件 commit: 8ab45aa + foo.txt (modified) + bar.txt (modified) 据我所知,用于合并给定的提交。但是否可以只使用部分提交?在这种情况下,我只想合并commit的foo.txt8ab45aa 重要提示: 关于这个话题有几个问题,但我的要求是保留修改的作者。其他几种解决方案会在用户进行合并时覆盖它。是否有可能通过在要保留的代码行末尾添加额外空间的方式

开发人员在其分支
foo分支
中进行了更改,该分支包含2个修改过的文件

commit: 8ab45aa
        + foo.txt (modified)
        + bar.txt (modified)
据我所知,用于合并给定的提交。但是否可以只使用部分提交?在这种情况下,我只想合并commit的
foo.txt
8ab45aa

重要提示:


关于这个话题有几个问题,但我的要求是保留修改的作者。其他几种解决方案会在用户进行合并时覆盖它。

是否有可能通过在要保留的代码行末尾添加额外空间的方式修改主代码(或将合并到的分支)

这样,您将强制冲突,然后您可以保留所需的更改,并且在git日志中您仍然可以看到开发人员所做的更改

git cherry-pick the-ID-of-revision
git checkout HEAD~1 -- file-we-dont-want-to-modify
git commit --amend --no-edit

嗯,这真是个好主意!!如果一个文件中出现多个冲突,我想不起来git是否也会保留作者,因为每一行的历史记录都是单独记录的。即使多个作者在同一行上发生冲突,您也可以一次解决一个冲突,所以是的logged@DanielStephens:同样,任何提交的作者都是保存在提交中的作者。这几乎是一个任意字符串。要查看Git如何存储它们,请随时运行
Git cat file-p HEAD
:这将显示当前提交的元数据。这里没有冲突:提交有一个快照,快照没有冲突,它们只是快照。有道理!几天前为git提出了一些其他问题(这些问题几乎都得到了回答)。来自Perforce的git概念很棒,但在很多层面上与Perforces构建项目的方式相冲突,实际上正在研究如何将Perforce转换为git的解决方案(就像tomtom所做的),但是git p4太有限了,所以我现在正在探索其他手动解决方案,以编写一个适合我和我们的depotImportant的转换器:提交不存储更改;它们存储完整的快照。提交的作者是提交元数据中作为作者的任何内容。当您查看提交并“看到”更改时,您真正看到的不是提交本身,而是提交父快照与提交快照的比较。所以,当你选择一个承诺,有很多事情在幕后进行。你可以做你想做的事情(有一种方法请参见eftshift0的答案),只要确保你知道你在做什么……你可能不想
git rm
整个文件,你可能想把它放回原样。通常更容易一些:
git cherry pick-n
;使用git reset HEAD调整索引和工作树内容——另一个文件<代码>git提交。要在不执行
-n
步骤的情况下执行此操作,请首先将
git rm
替换为
git checkout HEAD~2
。哦,@torek,这是一个很好的陷阱。该文件已被修改,未被删除。让我调整一下我的配方。更好,但是
HEAD~1
仍然是错误的,因为该提交有更新的文件…:-)啊,什么
git checkout HEAD~1--bar.txt
将具有bar.txt,而不会出现来自cherry pick操作的更改。。。换句话说,在
git commit--amend
之后,您将只修改foo.txt,bar.txt将与修订的父级相同,因此该文件没有任何更改。哦,伙计。。。。看在历史的份上别管它了<代码>我能纠正@torek一次。我可以在简历中使用它吗?