如何检查git分支与本地'假设 - 未更改'文件?

时间:2017-07-19 12:15:55

标签: git android-studio github version-control git-checkout

我已经从远程分支机构检出并修改了一些文件。但是我不希望在下一次提交中添加它们,因为它们仅适用于我的本地配置;事实上,我总是希望他们不被承诺。出于这个原因,我已经对这些文件应用了git update-index --assume-unchanged。但是,现在我在从这些文件与本地文件不同的分支机构签出时遇到问题: enter image description here

如果我点击“智能结账”' (这就是我需要的),它会抛出一个错误:"无法签出origin / master:以下文件的本地更改将被checkout覆盖:" 即使我点击"强制结账"它将抛出:"无法结帐原产地/主人:进入' .gitignore'不是uptodate。无法合并。"

那么如何在保持局部变化的同时从其他分支机构查看?

2 个答案:

答案 0 :(得分:2)

出于这个原因,我总是引导人们远离assume-unchanged。您最好的选择是找到一种不同的方式来保持您的更改不受回购。

从您的错误消息中,.gitignore文件似乎是有问题的文件之一。非共享/本地忽略规则不属于.gitignore;它们属于.git/info/exclude

其他情况可能需要单独处理。常见的情况是本地配置文件。一个典型的解决方案是仅对源代码控制模板,期望开发人员在本地创建实际的配置文件(在被忽略的路径或在repo工作树之外)。

如果你有本地/非共享版本的代码,我首先要重新审视原因。如果有必要,那么最好的解决方案可能是使用构建过程,让您从工作树之外交换代码。

最重要的是,如果您告诉git在路径上跟踪文件,那么它会尝试做到这一点。

答案 1 :(得分:0)

要签出另一个分支,Git需要了解每个文件的更改:

git update-index --no-assume-unchanged EACH_FILE

存储这些更改:

git stash save "Save local conf"

您现在可以结帐到另一个分支:

git checkout myotherbranch

最后,如果您希望在其他分支中进行本地更改,则可以将其恢复:

git stash pop

而且,正如Mark所述,我将使用--skip-worktree保护这些文件免遭更改。为什么? See here