git学习4-共享和更新项目

共享和更新项目

fetch

从一个或多个存储库中获取分支和/或标记(统称为“refs”),以及完成其历史记录所需的对象。关联远程仓库的分支将会被更新。(即将远程仓库的文件同步到本地)

默认情况下,任何指向历史记录的标签也会被获取;其效果是获取指向您感兴趣的分支的标记。此默认行为可以通过使用--tags--no-tags选项或配置remote.<name>. tagopt。通过使用显式获取标记的refspec,也可以获取不指向您感兴趣的分支的标记。

git fetch可以从单个指定的存储库或URL获取数据,也可以从多个存储库同时获取数据(如果给定<group>并且有远程服务)。

选项

  • --all:获取所有的远程仓库。
  • -a; --append:在.git/FETCH_HEAD的现有内容中添加引用的ref名称和对象名称。如果没有这个选项,.git/FETCH_HEAD中的旧数据将被覆盖。
  • --atomic:使用原子事务更新本地引用。要么更新所有引用,要么在错误时,不更新引用。
  • --depth=<depth>:限制从每个远程分支历史记录尖端获取指定数量的提交(commit)。
  • --shallow-since=<date>:深化或缩短浅层存储库的历史,以包括<date>之后的所有可达提交。
  • --shallow-exclude=<revision>:深化或缩短浅层存储库的历史,以排除从指定的远程分支或标记可到达的提交。此选项可指定多次。
  • --unshallow:如果原仓库是完整的,则将一个缩短的仓库转变为一个完整的仓库,并且会移除所有加在该仓库上的缩短限制。
  • -p; --prune:在获取之前,删除在远程上已经不再存在的任何远程跟踪引用。如果只是因为默认的标签自动跟踪或--tags选项而获取标签,那么标签就不会被删除。然而,如果获取标签是由于一个显式的refspec。
  • -n; --no-tags:默认情况下,指向从远程存储库下载的对象的标记将被获取并存储在本地。此选项禁用自动下载标记。
  • repository>:“远程”存储库,它是获取或拉取操作的源。这个参数可以是一个URL,也可以是远程服务器的名称。

pull

1
git pull [<options>] [<repository> [<refspec>…]]

将远程存储库中的更改合并到当前分支中。如果当前分支位于远程的版本之后,那么默认情况下,它将快进当前分支以匹配远程分支。如果当前分支和远程分支已经偏离,用户需要指定如何使用--rebase--no-rebase协调偏离的分支。

更准确地说,git pull运行带有给定参数的git fetch,然后根据配置选项或命令行标志调用git rebasegit merge来协调分支。

<repository>应该是传递给git-fetch的远程存储库的名称。<refspec>可以命名任意的远程引用(例如,标记的名称),甚至可以命名具有相应远程跟踪分支的引用集合(例如,refs/heads/*:refs/remotes/origin/*),但通常它是远程存储库中的一个分支的名称。

<repository><branch>的默认值从当前分支的“remote”和“merge”配置中读取,由git-branch --track设置。

merge相关的选项

  • --commit; --no-commit:执行合并并提交结果。这个选项可以用来覆盖--no-commit。只有在合并时才有用。

    使用--no-commit,执行合并并在创建合并提交之前停止,给用户一个机会在提交之前检查和进一步调整合并结果。

  • --edit; -e; --no-edit:在提交成功机械性合并前,打开编辑器来编辑自动生成的合并信息。

  • --squash; --no-squash:生成工作树和索引状态,就像发生了一个真正的合并(除了合并信息),但不实际做一个提交,移动HEAD,或记录$GIT_DIR/MERGE_HEAD(导致下一个git commit命令创建一个合并提交)。这允许你在当前的分支上创建一个单独的提交,它的效果与合并另一个分支相同。

  • --autostash; --no-autostash:在操作开始之前自动创建一个临时stash条目,将其记录在特殊的ref MERGE_AUTOSTASH中,并在操作结束后应用它。这意味着您可以在脏工作树上运行操作。但是,使用时要小心:成功合并后的最终隐藏应用程序可能会导致重要的冲突。

  • -r; --rebase[=false|true|merges|interactive]:当为true时,在获取后将当前分支重设为上游分支的顶部。如果有一个与上游分支对应的远程跟踪分支,并且上游分支在上次获取后被重置基点,则rebase将使用该信息来避免重基非本地更改。

    当设置为merge时,使用git rebase --rebase-merge进行rebase,这样本地合并提交就包含在rebase中。

    false时,将上游分支合并到当前分支。

    interactive时,启用rebase的交互模式。

    push

1
2
3
4
5
6
git push [--all | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run] [--receive-pack=<git-receive-pack>]
[--repo=<repository>] [-f | --force] [-d | --delete] [--prune] [-v | --verbose]
[-u | --set-upstream] [-o <string> | --push-option=<string>]
[--[no-]signed|--signed=(true|false|if-asked)]
[--force-with-lease[=<refname>[:<expect>]] [--force-if-includes]]
[--no-verify] [<repository> [<refspec>…]]

使用本地引用更新远程引用,同时发送完成给定引用所必需的对象。

当命令行没有指定使用<repository>参数推送的位置时,使用branch.*。参考当前分支的远程配置,以确定在何处推送。如果缺少配置,则默认为origin。

当命令行没有指定使用<refspec>…参数或--all--mirror--tags选项,命令通过查找remote.*找到默认的<refspec>push配置,如果没有找到,则使用push .default配置来决定推送什么

当命令行和配置文件中都没有指出推送到哪里,默认行为就会被执行,其流程为:当前分支被推送到对应上游分支,但是作为安全保障,如果上游分支不存在与本地同名的分支,则推送会被打断。

选项

  • <repository>“远程”仓库,它是push操作的目的地。这个参数可以是一个URL,也可以是远程服务器的名称。

  • <refspec>…:指定要用什么源对象更新什么目标引用。<refspec>参数的格式是一个可选的加号+,后面跟着源对象<src>,后面跟着一个冒号:,后面跟着目标ref <dst>

    <src>通常是你想推送的分支的名称,但它可以是任意的“SHA-1表达式”,例如master~4或HEAD。

  • --all:推送所有分支(即refs/heads/下的refs);不能与其他<refspec>一起使用。

  • --prune:删除没有本地对应的远程分支。例如,如果本地分支tmp不再存在,则远程分支tmp将被删除。

  • --mirror:为当前仓库添加一个镜像仓库,即本地仓库所作的任何行为都会被同步到镜像仓库,如创建、更新、删除等。也可以在remote.<remote>.mirror中配置。

  • -d; --delete:从远程存储库中删除所有列出的参考文献。这与在所有引用前面加上冒号是一样的。

  • --[no-]atomic:如果可用,在远程端使用原子事务。要么更新所有引用,要么在错误时,不更新引用。如果服务器不支持原子推送,推送将失败。

  • --[no-]force-with-lease; --force-with-lease=<refname>; --force-with-lease=<refname>:<expect>:通常,如果远程仓库不是本地仓库的祖先,则git push会拒绝执行。

    如果远程ref的当前值与配置值匹配,则此选项将覆盖此限制。即可以向非祖先仓库推送。

  • -f; --force:通常,该命令拒绝更新不是用于覆盖它的本地ref的祖先的远程ref。此外,当使用--force with-lease选项时,该命令拒绝更新当前值不符合预期值的远程ref。

    此标志禁用这些检查,并可能导致远程存储库丢失提交;小心使用。

    请注意--force适用于所有被推送的引用,因此将它与push.default设置为匹配或多个推送目的地配置为remote.*一起使用。push可以覆盖当前分支以外的引用。

  • --[no-]force-if-includes:只有当远程跟踪ref的尖端已在本地集成时,才强制更新。

  • --repo=<repository>:这个选项相当于<repository>参数。如果这两个参数都指定了,命令行参数优先。

  • -u; --set-upstream:对于每个最新或成功推送的分支,添加upstream (tracking)引用,该引用由无参数的git-pull和其他命令使用。

例子

  • git push:类似于git push <remote>,其中<remote>是当前分支的远端(或当如果没有为当前分支配置远端,即指origin)。
  • git push origin:在不进行其他配置的情况下,将当前分支推送到已配置的上游(branch.<name>)。合并配置变量),如果它与当前分支有相同的名称,并且错误输出而不推其他。
  • git push origin ::将匹配的分支推到origin
  • git push origin master:在源库中找到一个与master匹配的ref(最有可能的是,它会找到ref /heads/master),然后用它更新源库中相同的ref(例如ref /heads/master)。如果master远程不存在,则会创建它。
  • git push origin HEAD:将当前分支推到远程上相同名称的方便方法。
  • git push origin HEAD:master:将当前分支推到origin仓库中匹配master的远程ref。这种形式可以方便地推送当前的分支,而无需考虑它的本地名称。
  • git push origin :experimental:在origin仓库中找到一个匹配experimental的引用(例如refs/heads/experimental),并删除它。
  • git push origin +dev:master:使用dev分支更新origin仓库的master分支,允许非快进更新。这可能会在origin仓库中留下未引用的提交。

remote

1
2
3
4
5
6
7
8
9
10
11
12
13
git remote [-v | --verbose]
git remote add [-t <branch>] [-m <master>] [-f] [--[no-]tags] [--mirror=(fetch|push)] <name> <URL>
git remote rename <old> <new>
git remote remove <name>
git remote set-head <name> (-a | --auto | -d | --delete | <branch>)
git remote set-branches [--add] <name> <branch>…
git remote get-url [--push] [--all] <name>
git remote set-url [--push] <name> <newurl> [<oldurl>]
git remote set-url --add [--push] <name> <newurl>
git remote set-url --delete [--push] <name> <URL>
git remote [-v | --verbose] show [-n] <name>…
git remote prune [-n | --dry-run] <name>…
git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)…]

管理当前分支追踪的远程仓库。

命令

  • add:为<URL>的存储库添加一个名为<name>的远程服务器。然后,命令git fetch <name>可以用来创建和更新远程跟踪分支<name>/<branch>
    • 使用-f选项,git fetch <name>将在远程信息建立之后立即运行。
    • 使用--tags选项,git fetch <name>从远程仓库导入每个标签。
    • 使用--no-tags选项,git fetch <name>不从远程仓库导入标签。
  • rename:将远程仓库的名字从<old>更改到<new>。所有远程跟踪分支和远程的配置设置都会被更新。
  • remove; rm:移除名为<name>的远程仓库。移除所有远程跟踪分支和远程配置设置。
  • set-head:设置或删除指定远程的默认分支(即-ref refs/remotes/<name>/HEAD的目标)。不需要为远程设置默认分支,但允许指定远程的名称来代替特定的分支。例如,如果origin的默认分支设置为master,那么origin可以在你通常指定origin/master的任何地方指定。
  • set-branches:更改指定远程跟踪的分支列表。这可用于在远程的初始设置之后跟踪可用远程分支的子集。命名分支将被解释为git remote add命令行上指定的-t选项。
  • get-url:检索远程服务器的url。insteadOfpushInsteadOf的配置在这里展开。默认情况下,只列出第一个URL。
  • set-url:更改远程的url。为匹配regex <oldurl>的remote <name>设置第一个URL(如果没有给出<oldurl>的第一个URL)为<newurl>。如果<oldurl>不匹配任何URL,则会发生错误,不做任何更改。
  • show:提供有关远程仓库<name>的一些信息。
  • prune:删除与<name>关联的过时引用。默认情况下,删除<name>下陈旧的远程跟踪分支,但根据全局配置和远程的配置,我们甚至可能删除尚未推送到那里的本地标记。等价于git fetch --prune <name>,除非不会获取新的引用。
  • update:在存储库中获取由remotes定义的远程或远程组的更新。<group>。如果在命令行上既没有指定group,也没有指定remote,则使用配置参数remots .default;如果没有定义remotes.default,则所有没有配置参数remote.<name>skipDefaultUpdate设置为true将被更新。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2019 - 2024 My Wonderland All Rights Reserved.

UV : | PV :