Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重新规范化git历史_Git_Git Tfs - Fatal编程技术网

重新规范化git历史

重新规范化git历史,git,git-tfs,Git,Git Tfs,我正在尝试重新规范我的git历史记录中的行尾。我想这样做,因为这个回购是从一个使用git-tfs的tfs回购创建的,并且有多个提交都有混乱的行尾 如果我已经将.gittributes文件重设为包含*text=auto的第一次提交,git rebase--root--strategy renormalize master为什么不更正提交中的行尾呢?重设副本提交的重设,但它有局限性。最大的问题是它实际上无法复制任何合并提交。现代Git(在过去一两年内)已经获得了--rebase merges标志,这

我正在尝试重新规范我的git历史记录中的行尾。我想这样做,因为这个回购是从一个使用git-tfs的tfs回购创建的,并且有多个提交都有混乱的行尾


如果我已经将.gittributes文件重设为包含*text=auto的第一次提交,git rebase--root--strategy renormalize master为什么不更正提交中的行尾呢?

重设副本提交的重设,但它有局限性。最大的问题是它实际上无法复制任何合并提交。现代Git(在过去一两年内)已经获得了
--rebase merges
标志,这一标志距离我们更近了,但仍然无法复制合并。所以在这里,Git将重新执行合并

这可能足够好了,但仍然有一个障碍。即使新的初始提交中包含所需的
.gittributes
(在这种情况下,您可以同时转换该提交的内容,因此不需要
--root
),当rebase执行提交复制时,它也不必规范每个文件的行结束。例如,假设我们有一个小迷你图:

A--B--C   <-- master
到目前为止,我们的状态很好。现在,我们运行
git cherry pick master~1
,这就是
git rebase
将commit
B
复制到新commit
B'
所要做的。在
A
B
之间,某些文件会被修改,因此Git会将对这些文件的修改复制到索引和工作树中,您可以强制它重新规范化这些文件的行尾,以处理使更改适合所需的任何修复。但是
B
还添加了一个全新的文件,该文件的行尾不正确匹配。由于这个新文件在
A
A'
中都没有对应的文件,Git可以而且我认为会,尽管您必须测试它才能确定,只需批量复制它,而不必重新规范它的行尾

Git会对
B
-vs-
C
重复这一点;同样,任何全新的文件都可能无法重新规范化。因此,你最终会:

A--B--C   <-- master

A'-B'-C'  <-- new-master (HEAD)
A--B--C
A--B--C   <-- master

A'-B'-C'  <-- new-master (HEAD)