如果有人删除了一个远程分支,因为工作已经结束,我不知道,我不会做git fetch --prune,最终我会推回被删除的分支。
git fetch --prune
是否有一个可行的解决方案来强制Git在获取/提取时使用修剪模式,而不必每次都指定它?
如果你想在fetch时总是prune,我可以建议使用别名。
fetch
prune
只需输入git config -e打开编辑器,更改特定项目的配置,并添加如下部分
git config -e
[alias] pfetch = fetch --prune
当你用git pfetch获取时,修剪将自动完成。
git pfetch
git 1.8.5(2013年第四季度):
"git fetch"(因此也是"git pull")学会了检查"fetch.prune"和"remote.*.prune"配置变量,并像给出"--prune"命令行选项一样行事。
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
详见提交737年c5a9:
如果没有"git fetch --prune",另一方已经删除的分支的远程跟踪分支将永远存在 有些人想总是运行"git fetch --prune". 为了满足那些想要总是修剪或从特定远程获取时修剪的用户,添加两个新的配置变量"fetch.prune"和"remote.<name>.prune": "fetch.prune"允许为所有获取操作启用剪枝。 "remote.<name>.prune"允许改变每个远程的行为。 后者自然会覆盖前者,命令行中的--[no-]prune选项将覆盖配置的默认值。 由于--prune是一个潜在的破坏性操作(Git还没有为已删除的引用保留reflogs),我们不想在没有用户同意的情况下进行修剪,因此默认情况下这个配置不会开启。
为了满足那些想要总是修剪或从特定远程获取时修剪的用户,添加两个新的配置变量"fetch.prune"和"remote.<name>.prune":
remote.<name>.prune
后者自然会覆盖前者,命令行中的--[no-]prune选项将覆盖配置的默认值。
--[no-]prune
由于--prune是一个潜在的破坏性操作(Git还没有为已删除的引用保留reflogs),我们不想在没有用户同意的情况下进行修剪,因此默认情况下这个配置不会开启。
git config --global fetch.prune true
在你所有的Git存储库中,git fetch和git pull总是--prune:
上面的命令在你的全局Git配置(通常是~/.gitconfig)中添加以下几行。使用git config -e --global查看全局配置。
~/.gitconfig
git config -e --global
[fetch] prune = true
总是--prune,但来自一个存储库:
git config remote.origin.prune true #^^^^^^ #replace with your repo name
上面的命令在你的本地Git配置(通常是.git/config)中添加下面最后一行。使用git config -e查看您的本地配置。
.git/config
[remote "origin"] url = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx fetch = +refs/heads/*:refs/remotes/origin/* prune = true
你也可以在第二个命令中使用--global,或者在第一个命令中使用--local。
--global
--local
git config --global gui.pruneDuringFetch true
如果你使用git gui,你可能还会对以下内容感兴趣:
git gui
附加:
[gui] pruneDuringFetch = true
git help config中的对应文档:
git help config
--global 对于写入选项:写入全局~/.gitconfig文件而不是存储库.git/config,如果该文件存在而~/.gitconfig文件不存在,则写入$XDG_CONFIG_HOME/git/config文件。
对于写入选项:写入全局~/.gitconfig文件而不是存储库.git/config,如果该文件存在而~/.gitconfig文件不存在,则写入$XDG_CONFIG_HOME/git/config文件。
$XDG_CONFIG_HOME/git/config
,
--local 对于写入选项:写入存储库.git/config文件。这是默认行为。
对于写入选项:写入存储库.git/config文件。这是默认行为。
fetch.prune 如果为true,则fetch将自动像在命令行中给出--prune选项一样行事。另见remote.<name>.prune。
如果为true,则fetch将自动像在命令行中给出--prune选项一样行事。另见remote.<name>.prune。
gui.pruneDuringFetch 如果git-gui在执行取回时应该修剪远程跟踪分支,则返回true。系统默认值为false。
gui.pruneDuringFetch
如果git-gui在执行取回时应该修剪远程跟踪分支,则返回true。系统默认值为false。
remote.<name>.prune 当设置为true时,默认情况下,从这个远程获取也将删除远程上不再存在的任何远程跟踪引用(就像在命令行上给出--prune选项一样)。覆盖fetch.prune设置(如果有的话)。
当设置为true时,默认情况下,从这个远程获取也将删除远程上不再存在的任何远程跟踪引用(就像在命令行上给出--prune选项一样)。覆盖fetch.prune设置(如果有的话)。
最终我将推回删除的分支
这是我认为你应该解决的问题。如果你配置了git,让它推送你不想推送的分支,这可能是个问题。我个人更倾向于只在显式指定想要推送的分支时才推送分支。
有关如何在git存储库中配置推送设置的指导,请参阅https://stackoverflow.com/a/948397/3753318。