如果有人因为工作结束而我不知道而删除了远程分支,我不会这样做git fetch --prune
,最终我会推回已删除的分支。
是否有一个可行的解决方案可以强制 Git 在获取/拉取时使用修剪模式,而不必每次都指定它?
如果有人因为工作结束而我不知道而删除了远程分支,我不会这样做git fetch --prune
,最终我会推回已删除的分支。
是否有一个可行的解决方案可以强制 Git 在获取/拉取时使用修剪模式,而不必每次都指定它?
“
git fetch
”(因此“git pull
”也是如此)学会了检查“fetch.prune
”和“remote.*.prune
”配置变量并表现得就像--prune
给出了“”命令行选项一样。
这意味着,如果您将 remote.origin.prune 设置为 true:
git config remote.origin.prune true
任何git fetch
或git pull
将自动修剪。
注意:Git 2.12(2017 年第一季度)将修复与此配置相关的错误,该错误会导致git remote rename
行为不端。
请参阅“如何重命名 git 遥控器? ”。
在提交 737c5a9中查看更多信息:
如果没有“
git fetch --prune
”,另一方已经删除的分支的远程跟踪分支将永远保留。
有些人想一直跑“git fetch --prune
”。为了适应想要总是修剪或从特定远程获取时想要修剪的用户,请添加两个新的配置变量“
fetch.prune
”和“remote.<name>.prune
”:
- "
fetch.prune
" 允许为所有提取操作启用修剪。- "
remote.<name>.prune
" 允许更改每个遥控器的行为。后者自然会覆盖前者,
--[no-]prune
命令行中的选项将覆盖配置的默认值。由于
--prune
这是一个潜在的破坏性操作(Git 还没有为已删除的引用保留 reflogs),我们不想在未经用户同意的情况下进行修剪,因此默认情况下不会启用此配置。
git config --global fetch.prune true
始终--prune
在您git fetch
的git pull
所有 Git 存储库中使用:
git config --global fetch.prune true
上述命令会在您的全局 Git 配置(通常~/.gitconfig
)中附加以下几行。用于git config -e --global
查看您的全局配置。
[fetch]
prune = true
git config remote.origin.prune true
始终--prune
但从一个存储库:
git config remote.origin.prune true
#^^^^^^
#replace with your repo name
上面的这个命令会在你的本地 Git 配置(通常.git/config
)中添加最后一行。用于git config -e
查看您的本地配置。
[remote "origin"]
url = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
fetch = +refs/heads/*:refs/remotes/origin/*
prune = true
您也可以--global
在第二个命令中使用或--local
在第一个命令中使用。
git config --global gui.pruneDuringFetch true
如果您使用git gui
,您可能还会对以下内容感兴趣:
git config --global gui.pruneDuringFetch true
附加:
[gui]
pruneDuringFetch = true
相应的文档来自git help config
:
--global
对于写入选项:写入全局
~/.gitconfig
文件而不是存储库.git/config
,$XDG_CONFIG_HOME/git/config
如果此文件存在而~/.gitconfig
文件不存在,则写入文件。
--local
对于写入选项:写入存储库
.git/config
文件。这是默认行为。
fetch.prune
如果为 true,则 fetch 将自动表现得就像
--prune
在命令行上给出了选项一样。另请参阅remote.<name>.prune
。
gui.pruneDuringFetch
如果git-gui在执行 fetch 时应该修剪远程跟踪分支, 则为 "true" 。默认值为“假”。
remote.<name>.prune
当设置为 true 时,默认情况下从此远程获取也将删除远程上不再存在的任何远程跟踪引用(就像
--prune
在命令行上给出了选项一样)。覆盖fetch.prune
设置(如果有)。
如果你想永远prune
当你fetch
,我可以建议使用别名。
只需键入git config -e
以打开您的编辑器并更改特定项目的配置并添加类似的部分
[alias]
pfetch = fetch --prune
当您使用git pfetch
prune 获取时将自动完成。
最终我会推回删除的分支
这是我认为你应该解决的问题。如果您配置了 git 以便它推送您不想推送的分支,这可能是一个问题。我个人更喜欢将其设置为仅在明确指定要推送的分支时才推送分支。
有关如何在 git 存储库中配置推送设置的一些指导,请参阅https://stackoverflow.com/a/948397/3753318 。