Visual Studio Code/Git:有什么方法可以防止在主分支上进行编辑,但允许合并?

use*_*144 7 git visual-studio-code

在处理项目时,我希望始终在主分支以外的分支上进行编辑。Master 用于工作、经过测试的代码。

我有时会忘记这一点,然后开始在主分支上编码。然后我必须重置更改等。

我想知道有什么方法可以使主文件只读,但仍然允许合并到其中。

Von*_*onC 5

另一种选择是 VSCode 1.68(2022 年 5 月):

Git:分支保护

使用新git.branchProtection设置,您可以配置要保护的特定分支。

VS Code 将避免直接在受保护的分支上提交,并为您提供创建新分支来提交的机会。
您可以通过设置微调此行为git.branchProtectionPrompt

这样,在合并回main.


VSCode 1.70(2022 年 7 月)修复了问题 153787中报告的回归并说明了该设置的工作原理:

  • 推出最新的 VS Code Insider
  • 打开包含 git 存储库的文件夹/工作区
  • 确保该scm.showActionButton设置已启用
  • 确保该git.showActionButton设置的所有三个属性均已启用
  • 使用该git.branchProtection设置为当前分支启用分支保护
  • 更改文件:
    • 确认Commit显示“ ”操作按钮并且具有$(check)代码图标
  • 将设置git.branchProtectionPrompt设为alwaysCommitToNewBranch
    • 确认Commit显示“ ”操作按钮并且具有$(git-branch)代码图标


Von*_*onC 3

您可以添加一个预提交钩子(就像这个要点,它可以阻止意外提交到master)
您可以调整该钩子以绕过它进行合并提交

VSCode 应该通过 Git 尊重预提交,如果您使用master.
你需要隐藏、切换分支、隐藏流行音乐。

实际上,使用git switch命令(Git 2.23,2019 年 8 月),您甚至不必隐藏。

示例部分git switch处理您的场景(开始在“错误”分支上工作)

在错误的分支中工作后,可以使用以下命令切换到正确的分支:

$ git switch mytopic
Run Code Online (Sandbox Code Playgroud)

但是,您mytopic在本地修改的文件中的“错误”分支和正确的“”分支可能会有所不同,在这种情况下,上述切换将失败,如下所示:

$ git switch mytopic
error: You have local changes to 'frotz'; not switching branches.
Run Code Online (Sandbox Code Playgroud)

您可以将-m标志赋予该命令,该命令将尝试三向合并:

$ git switch -m mytopic
Auto-merging frotz
Run Code Online (Sandbox Code Playgroud)