有没有一种方法可以本地保护一个 Git 分支?

3

我正在评估别人的git存储库,我不想做出意外提交的更改。

有没有一种方法可以仅使用“纯Git”本地保护分支?例如通过防止将提交保存到特定分支来实现?

我只需要这个影响我的本地克隆。

不应涉及任何Github或其他git托管服务功能。 我希望这是尽可能便携的。


你可以创建一个 pre-commit 钩子,当在特定分支上时会失败。但你也可以检出一个新分支,这样如果手指抽搐并不小心输入了 git commit 命令,你的提交将在新分支上。 - larsks
1
如果您克隆了一个repo,您也会拥有远程状态的副本,因此如果您提交,可以轻松地切换回去。 - Evert
如果您不确定要在同一分支上进行更改,请简单地检出一个新分支。 - charindu
事实上,即使您在原始分支中意外提交了一个提交,您仍然可以将其还原。您需要确保的是,如果您正在同一分支上工作,则不要将已发布的提交还原到远程。因此,一旦您在新分支中完成工作,就可以将该分支合并或变基到原始分支中。没有任何突如其来的需求。 - charindu
2
你也可以直接移除远程分支,这样即使你提交了一些更改,也无法将其推送回上游。 - Jim Redmond
2个回答

4

如果这是你的本地克隆,那么这就是你的代码库。你已经从他们的代码库中获取了历史记录,并正在评估所获取的历史记录。

没有必要保护任何东西,只需不要推送即可。可以肯定地说,他们不会无意中获取。如果你想防止可能的自反推送,可以这样做。

git config remote.origin.pushurl "You really didn't want to do that."

你所做的任何事情只有在你 push 或他们 fetch(新的或更改的)引用和任何新的历史记录时才会影响他们的存储库。


3
你可以使用 git hook。 将以下脚本放置到 .git/hooks/pre-commit 中:
#!/bin/bash

current_branch="$(git branch --show-current)"
for protected_branch in "main" "other_branch_you_want_protected"; do
    if [[ "$protected_branch" == "$current_branch" ]]; then
        echo "ERROR: local branch $current_branch is protected" 
        exit 1
    fi
done

exit 0

在Linux上,不要忘记对脚本文件执行chmod +x命令。

2
我认为预提交钩子是“杀鸡焉用牛刀”。像Git这样的版本控制工具的整个目的就是“跟踪更改”。第一道防线就是简单地“不提交任何东西”。由于它是一个本地存储库,所以应该很容易做到。如果OP不小心提交了他们不喜欢的内容,那么在Git历史记录中很明显,他们总是可以还原它。最后,“用新的临时分支保护基线”可能比编写预提交钩子更好。 - paulsm4
1
虽然我总体上同意,但可能会有这样的用例,例如如果结帐位于网络共享或类似位置。OP应该得到一个不仅仅是“不要那样做”的答案。 - ChrisB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接