我搜索了互联网和SO,但无法解决这个问题。 我正在使用git。我有代码,它在计算机C1上有一个分支B1。在另一台计算机C2上,我克隆了这个分支并在本地,再创建了一个分支B2。 B2未被推送到中央存储库。
B1和B2完全相同,只有一个文件FILE1。所以我将该文件添加到.gitignore并在B2中提交。现在每当我在B1中进行编码时,我都会将其推送到中央存储库中。要在计算机C2上进行这些更改,我会
git pull origin B1
当我在分支B2时。但这会给出错误消息:
CONFLICT (content): Merge conflict in FILE1
我想问一下,如果有更好的方法可以将B1中的更改带到B2(不带FILE1),或者我如何改进当前的方法。感谢您的帮助,因为我是git的新手。
答案 0 :(得分:4)
.gitignore
文件用于忽略未跟踪的文件,例如已编译的*.o
文件。将文件提交给Git后,.gitignore
将不再适用。
解决问题的常用方法是创建一个基本“样本”文件并将其存储在存储库中(而不是真实文件)。例如,如果您有一个名为foobar.config
的文件,则创建一个包含适当内容的foobar.config.sample
文件并将其放入存储库中。另外,删除foobar.config
文件。然后,对于需要配置文件的每个结帐,请将foobar.config.sample
复制到foobar.config
并根据需要进行修改。
另一种方法可能是让您的代码识别“本地”配置文件。因此,您可以将foobar.config
的公共部分放入存储库,您的代码也会查找foobar.config.local
文件并使用本地设置覆盖主foobar.config
文件中的任何设置。
答案 1 :(得分:1)
我认为你误解了.gitignore
的目的:
gitignore文件指定git应忽略的故意未跟踪文件。 git已经跟踪的文件不受影响。
因此,如果您的文件已被Git跟踪(在您的情况下似乎是这样),则将其添加到.gitignore
不会改变任何内容。
当您遇到合并冲突时,这意味着该文件已在您当前的工作树和您要合并的位置(在您的情况下,远程存储库)中进行了更改。您**必须*解决任何和所有合并冲突。有很多资源可以解决合并冲突,其中包括Git User Manual。您还可以specify that Git use the local or remote copy to resolve conflicts:
git pull -Xtheirs origin B1
如果您从未打算跟踪该文件,可以将其删除:
git rm --cached myfilename
As Greg mentions,如果您的意图是将文件作为模板配置,请将其命名为,然后将其复制并将专用版本添加到.gitignore
。
答案 2 :(得分:1)
如果您已经意外检入了foo.txt文件,并且可以通过其他方式重新创建它(例如通过编译某些来源),您可以git rm /path/to/foo.txt
将其从版本控制中删除,然后.gitignore
1}}也会做你想做的事。