Git check out 旧分支 : any way to not delete newly created files?

标签 git

情况是这样的。我们有:

branch_old
branch_new

Branch_new 包含一个新创建的文件,DeveloperOptions。这个文件是 repo 的一部分(因此它会随着新安装而被删除),但是,当他们编译将添加 git --assume-unchanged 的项目时,一个脚本会在开发人员机器上运行那个文件。然后允许开发人员通过修改该文件(主要是输出日志级别和输出自定义)来指定他们自己的编译“选项”,这种方式将被 git 忽略,因此永远不会在远程提交/推送/更改。

这就是问题所在:当我们从 branch_new(有文件) check out 到 branch_old(没有文件)时,git 不允许 check out ,因为“你的工作树包含会被 check out 覆盖的更改”现在,如果我们将 branch_new 分支到 branch_very_new,我们可以毫无问题地无限地来回反弹。但是在旧分支上,因为文件不存在,git 试图在 checkout 时将其从系统中删除,从而导致警告。

有什么办法解决这个问题吗?或者,是否有任何合适的方法让 git 忽略所有 future 对被跟踪文件的更改?这就是我们真正要做的。

最佳答案

Git 非常小心,不会覆盖您的更改。因此,您需要为更改分支编写别名或脚本,以便您的用户更改不会被覆盖。

git update-index --no-assume-unchanged <config file>
git stash //Put it in the stash to change branches
git checkout <branchname>
git stash pop //Bring back your changes
git update-index --assume-unchanged <config file>

您的 assume-unchanged 会阻止 git 跟踪更改。所以它把它当作一个未跟踪的文件,你的另一个分支有旧的更改并检查该分支意味着 git 将要应用这些更改(如果分支正在跟踪你的分支中未跟踪的文件,也会发生这种情况). Git 不确定如何解决差异,因此它会停止 checkout 以防止丢失任何东西。

关于Git check out 旧分支 : any way to not delete newly created files?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22848131/

相关文章:

java - 如何确保 gradle 中的项目具有相同的 jar 版本?

git - 您可以将 Databricks 作业添加到 Git 存储库吗?

git - 重置本地 git 仓库

git - 我可以为 "merge"等定义一个 "git merge"别名吗?

Git、Github、修复提交历史记录

git - .gitignore 中的评论?

Git:修改工作目录时如何检查本地分支是否领先于远程分支?

git - 如何使用最近的标签来装饰 git 日志?

GitLab 无法自动 merge 。 merge 请求包含必须解决的 merge 冲突

Git 日志显示提交中有多个分支?