fetch
从另一个储存库下载对象或引用:
git fetch origin # 更新远程跟踪
pull
从远端拉取代码某个分支的更新,再与本地的指定的分支合并:
git pull {远程主机名} {远程分支名}:{本地分支名} # 要合并到当前分支可省略冒号后面的
git pull 使用指定的参数运行 git fetch ,并调用 git merge 将检索到的分支头合并到当前分支中。使用 --rebase ,将运行 git rebase 而不是 git merge
git pull origin newMain
等同于:
git fetch origin
git merge origin/newMain
在没有参数的情况下, pull 命令只在克隆版本库中能发挥作用,因为只有该克隆体中有默认的原版本库的连接。当我们执行 pull 操作时,也可以用参数来指定任意版本库的路径,以便从某一特定开发分支中提取相关修改。
Git 允许开发者自由地命名本地分支。必须要在使用 fetch 、 pull 或 push 时在参数中用冒号来指定它们。用冒号之前的单词指定源分支,而冒号之后的单词则用于指定目标后支。
git pull clone organ:local
使用 --no-rebase
默认合并
git config pull.rebase false
是默认的 merge 合并规则。
- 执行后先拉取(
fetch
)远程更新,然后执行merge
进行将远程分支的提交与本地的提交合并,生成一个新的 merge 提交 - 保留完成的分支记录,但是会产生大量的 merge 提交
- 多人协作时希望清晰看到分支合并轨迹,保留完整的合并记录
使用 --rebase
变基合并
git config pull.rebase true
将进行变基提交。
- 先执行拉取(
fetch
) ,然后执行rebase
将本地分支的提交 “嫁接” 到远程的最新分支,不会产生 merge 提交 - 提交历史线清晰,彷佛所有的修改都是基于最新的远程代码逐步完成的,但是会更改本地的提交的哈希值
- 希望保持提交历史的简洁,个人开发或小团队,避免过多的 merge 记录
使用 --ff-only
仅快进合并
git config pull.ff only
将进行仅快进合并
- 只会在 “本地分支提交时远程分支提交的直接延续” 时执行 fast-forward 合并 (直接移动分支指针,不产生新的提交)。如果存在冲突或本地有独立的提交,将会直接报错,拒绝合并。
- 严格要求本地分支必须基于最新的远程代码开发,强制保留历史线性,避免任何合并操作
建立追踪关系
查看关系
使用 -vv
查看当前的关系
git branch -vv
建立关系
在 git clone 的时候,会自动创建追踪关系。也就是说,本地的 newMain 分支自动追踪 origin/newMain 分支。
手动创建追踪关系:
git branch --set-upstream-to=origin/{分支} {本地分支}
当存在绑定关系后, git pull 可以省略远程分支名:
git pull origin
如果仅存在一个追踪分支,则:
git pull
配置别名
git config --global alias.{别名} 'git 命令,但是不能带 git'