我用三个提交创建了一个补丁
git format-patch <revision_three_commits_ago>
Run Code Online (Sandbox Code Playgroud)
这会创建三个我从笔记本邮寄的补丁文件,并在我的桌面计算机上读取邮件(两个都是Windows框).
我什么时候做
git am --3way --ignore-space-change *.patch
Run Code Online (Sandbox Code Playgroud)
补丁适用,但我没有为提交获得相同的SHA1 ID.在修补文件中搜索了一下,我发现台式计算机上的修改后的行结束了LF,而笔记本上的修改后的行(我创建了修补程序)结束了CR LF.
所以,我的第一个念头就是打电话给git am没有--ignore-space-change,但是这给了我一个错误(补丁不适用).
我怎么能告诉git format-patch或者git am如何处理行结尾(msysgit 1.7.4)?
难道我真的拿VIM和更改文件格式UNIX来DOS之前,我可以应用补丁?
编辑:甚至没有用VIM修改补丁文件有帮助:我想,set ff=dos一个:%s/^M//g会有所帮助,但事实并非如此!
在我看来,应用补丁应该会产生完全相同的内容,也会产生相同的提交哈希值,就像我从创建补丁的其他repo中提取的那样.我错了吗?
假设您有以下修订图,c为当前分支:
c a
\ /
b
Run Code Online (Sandbox Code Playgroud)
git rebase --onto a b 创建以下内容:
c
/
a
/
b
Run Code Online (Sandbox Code Playgroud)
并且git rebase --onto b a返回到图:
c a
\ /
b
Run Code Online (Sandbox Code Playgroud)
但是,在两次重组之前,c的新SHA1与c的旧SHA1不同.为什么会这样?
怎么做这样的事情:
创建包含以下内容:
$ cat testfile.txt
此文件将使用以下ID提交:83b90a07620ef578450c40a6d38bacc42de7ad2d
提交testfile.txt
$ git add testfile.txt
$ git commit -m'谢谢'
执行git log验证预测的提交id:
$ git log
commit 83b90a07620ef578450c40a6d38bacc42de7ad2d
作者:rohit01 < * @ gmail.com>
日期:2月21日星期五23:46:52 + 0530
基本上,预测下一个git commit id并提交包含该commit id的文件.