引用规格(RefSpec)基本作用
定义引用映射:RefSpec 定义了源引用和目标引用之间的映射关系。
控制传输行为:通过 RefSpec,你可以控制哪些引用会被拉取或推送,以及它们如何被处理(例如是否强制更新)。
引用规格(RefSpec)基本格式
+<src>:<dst>
在 Git 的引用规格(RefSpec)中,<src>
和 <dst>
的含义取决于你是在 推送 还是 拉取 操作。
当你使用 git push 命令时:
<src>
:源引用路径,通常是指 本地仓库 中的分支或标签。
<dst>
:目标引用路径,通常是指 远程仓库 中的分支或标签。
+
(可选):强制更新标志,表示即使目标引用已经存在且不快进(non-fast-forward),也强制更新。
当你使用 git fetch 或 git pull 命令时:
<src>
:源引用路径,通常是指 远程仓库 中的分支或标签。
<dst>
:目标引用路径,通常是指 本地仓库 中的分支或标签。
+
(可选):强制更新标志,表示即使目标引用已经存在且不快进(non-fast-forward),也强制更新。
强制推送 (-f) 和强制更新 (+) 的区别
-f
或 --force
是一个通用的强制选项,适用于多种 Git 命令。
+
是引用规范中的强制符号,主要用于 git push
和 git fetch
中,表示强制更新引用。
git push -f origin release
,强制推送本地 release
分支到远程仓库,覆盖远程 release
分支的所有提交和历史记录。
git push origin +release:dev
,强制推送本地 release
分支到远程仓库的 dev
分支,覆盖远程 dev
分支的所有提交和历史记录。
默认 RefSpec
当你克隆一个仓库时,Git 会自动设置默认的 RefSpec :+refs/heads/*:refs/remotes/origin/*
,
默认 RefSpec 的作用 : 当你执行 git fetch 或 git pull 时,默认 RefSpec 会自动创建或更新本地的远程跟踪分支。
自定义 RefSpec
● git fetch origin +refs/heads/release:refs/remotes/origin/dev
简化写法 git fetch origin +release:dev
● git fetch origin +refs/heads/release:refs/remotes/origin/release
简化写法:git fetch origin +release
● git pull origin +refs/heads/release:refs/remotes/origin/dev
简化写法 git pull origin +release:dev
● git pull origin +refs/heads/release:refs/remotes/origin/release
简化写法 git pull origin +release
● git push origin +refs/heads/dev:refs/heads/release
简化写法:git push origin +dev:release
● git push origin +refs/heads/release:refs/heads/release
简化写法: git push origin +release
● git push origin refs/tags/v1.0:refs/tags/v1.0
简化写法:git push origin v1.0
● git push origin :refs/heads/release
简化写法:git push origin :release
空的 <src>
表示删除目标引用
删除远程仓库 origin
中的 release
分支
查看和配置 RefSpec
● git config --get-all remote.origin.fetch
查看当前 RefSpec
● git config --add remote.origin.fetch "+refs/heads/feature-*:refs/remotes/origin/feature-*"
添加新的 RefSpec
在拉取时自动拉取所有以 feature-
开头的远程分支,并创建对应的远程跟踪分支。
● git config --replace-all remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
修改现有的 RefSpec