跳到主要内容

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'