如果有人因为工作已经结束而删除了远程分支,而我并不知道,我就不会执行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 remote rename
不正常工作。请查看commit 737c5a9的更多信息:
没有 "git fetch --prune
" 命令,远程跟踪分支将永久存在于本地,即使对方已经删除了这些分支。有些人想始终运行 "git fetch --prune
" 命令。fetch.prune
" 和 "remote.<name>.prune
":fetch.prune
" 允许启用所有获取操作的修剪。remote.<name>.prune
" 允许更改每个远程的行为。--[no-]prune
选项将覆盖配置的默认值。--prune
是一项潜在具有破坏性的操作(Git 尚未为已删除的引用保留 reflog),我们不希望在没有用户同意的情况下进行修剪,因此此配置不会默认开启。git config --global fetch.prune true
。 - VonCgit config --global fetch.prune true
为了让所有的Git仓库在执行git fetch
和git pull
命令时,总是自动执行--prune
操作,请使用上述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 帮助文档 的相关说明:
--global
写入配置:写入全局的
~/.gitconfig
文件,而非仓库的.git/config
文件。如果$XDG_CONFIG_HOME/git/config
文件存在,则写入该文件。如果~/.gitconfig
文件不存在,则会创建该文件。
--local
写入配置:写入仓库的
.git/config
文件。这是默认行为。
fetch.prune
如果设置为 true,在执行 fetch 命令时会自动加上
--prune
选项。也可参见remote.<name>.prune
设置。
gui.pruneDuringFetch
如果设置为 "true",在使用 git-gui 执行 fetch 命令时会同时清理远程跟踪分支。默认值为 "false"。
remote.<name>.prune
如果设置为 true,则从该远程仓库执行 fetch 命令时,会自动删除那些在远程仓库已不存在的远程跟踪引用(就像命令行上加了
--prune
选项一样)。会覆盖任何fetch.prune
的设置。
git config -e
和 git config -e --global
。不再需要输入 vim
命令来指向特定路径的 git 配置文件,也不必再考虑那个特定路径是什么了。 - ecbrodiegit config --global fetch.prune true
"并附上相关文档的链接就足够了。 - Thibaud Colasfetch
时总是进行prune
,我建议使用 别名。只需输入git config -e
以打开编辑器,并更改特定项目的配置,添加如下部分:
[alias]
pfetch = fetch --prune
使用git pfetch
命令获取代码时,修剪操作将自动执行。
pull
和fetch
以及它们的修剪版本两个选项。实际上,我认为(但我没有尝试过)你可以直接在别名部分写fetch = fetch --prune
,因此pull
将自动使用修剪后的fetch
。 - ThanksForAllTheFishfetch = fetch --prune
不起作用,使用别名覆盖命令对我也没有用。这可能是因为我使用的是旧版本(1.7.2.5)。 - Uipko我最终会将已删除的分支推回去。
如果你的git配置使它推送了你不想推送的分支,这可能会成为一个问题。个人而言,我更喜欢设置它仅在我明确指定要推送的分支时才进行推送。
请参考https://dev59.com/mnNA5IYBdhLWcg3wdtv5#948397,了解如何配置 git 仓库的推送设置。
git fetch
时进行修剪!请参见我下面的答案。 - VonC