您现在的位置是:首页 >其他 >Git常用命令pull和push网站首页其他

Git常用命令pull和push

zsx_yiyiyi 2024-06-17 11:19:00
简介Git常用命令pull和push

Git常用命令pull和push

1、pull

pull 从远程获取代码并合并本地的版本。

# 第一次和远程关联上之后,在提交之前要先pull一下远程的更新才行
# 拉取所有远程分支到本地仓库中
# git pull = git fetch + git merge
$ git pull
# 取回远程仓库的变化,并与本地分支合并
$ git pull <远程主机名> <远程分支名>:<本地分支名>
$ git pull origin master:branch1

如果远程分支是与当前分支合并,则冒号后面的部分可以省略:

$ git pull <远程主机名> <远程分支名>
$ git pull origin master

用 fetch 表示:

$ git fetch origin branchName
# 合并名为origin/master的分支到当前所在分支
$ git merge origin/branchName

获取远程仓库的变更:

# 获取远程服务器上的变更,并合并到你的工作目录
$ git pull repository
$ git pull https://gitee.com/zsx242030/um.git

2、push

从将本地的分支上传到远程并合并。

分支推送顺序的写法是 <本地分支>:<远程分支>。

2.1 推送分支

# 将本地分支推送到远程分支
# 如果远程没有这个分支,会新建一个同名的远程分支
# 如果省略远程分支名,则表示两者同名,即会产生一个和本地分支同名的远程分支
# 该命令可以理解为将<本地分支名>的代码推送到<远程主机名>中的<远程分支名>上
# <远程主机名>默认为origin
$ git push <远程主机名> <本地分支名>:<远程分支名>

该命令的几种用法:

第一种,所有的参数都有:

$ git push origin develop:master

将本地的 develop 分支上的代码推送到远程主机名为 origin 中 master 的分支上,如果远程的 master 分支不存

在,则会被创建,这也是一种创建远程分支的办法。

第二种,省略 <远程分支名>:

$ git push origin develop

如果本地分支名和远程分支名一样的情况下,可以省略 <远程分支名>。如果远程主机中不存在该分支,那么会被

创建。该命令等价于:

$ git push origin develop:develop

第三种,省略 <本地分支名> 和 <远程分支名>:

$ git push origin

如果本地分支已经跟远程分支建立了追踪关系,那么可以省略<远程主机名>和 <远程分支名>。

使用 git branch -vv 命令,可以查看本地分支跟远程分支是否存在追踪关系。

这种推送方式的具体操作:

$ git checkout -b branch1

$ git push --set-upstream origin branch1
Total 0 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
remote: Create a pull request for 'branch1' on Gitee by visiting:
remote:     https://gitee.com/zsx242030/um/pull/new/zsx242030:branch1...zsx242030:master
To https://gitee.com/zsx242030/um.git
 * [new branch]      branch1 -> branch1
Branch branch1 set up to track remote branch branch1 from origin.

$ git push origin

$ git branch -vv
* branch1 40f466a [origin/branch1] develop | add test.txt

第四种,省略 <远程主机名>、<本地分支名> 和 <远程分支名>:

$ git push

只需要保证本地仓库只跟一台远程主机有关联即可。

如果当前分支与多个主机存在追踪关系,则可以使用 -u 选项指定一个默认主机,这样后面就可以不加任何参数使

用 git push。

$ git checkout -b branch2

$ git push --set-upstream origin branch2
Total 0 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
remote: Create a pull request for 'branch2' on Gitee by visiting:
remote:     https://gitee.com/zsx242030/um/pull/new/zsx242030:branch2...zsx242030:master
To https://gitee.com/zsx242030/um.git
 * [new branch]      branch2 -> branch2
Branch branch2 set up to track remote branch branch2 from origin.

$ git push

$ git branch -vv
* branch2 40f466a [origin/branch2] develop | add test.txt

不带任何参数的 git push,默认只推送当前分支,这叫做 simple 方式。此外,还有一种 matching 方式,会推送

所有有对应的远程分支的本地分支。Git 2.0 版本之前,默认采用 matching 方法,现在改为默认采用 simple 方

式。如果要修改这个设置,可以采用 git config 命令。

$ git config --global push.default matching
# 或者
$ git config --global push.default simple

除非你将分支推送到远端仓库,不然该分支就是不为他人所见的。

# 强行推送当前本地分支到远程仓库,即使有冲突
$ git push <远程主机名> --force
$ git push --force origin
# 推送所有本地分支到远程仓库
$ git push <远程主机名> --all
$ git push --all origin

上面命令使用 –force 选项,结果导致在远程主机产生一个非直进式的合并(non-fast-forward merge)。除非你很

确定要这样做,否则应该尽量避免使用 –force 选项。

# 第一次推送是要加上-u,可以把本地的master和远程的master关联起来,方便以后的推送或者拉取
$ git push -u origin master

2.2 删除分支

# 删除远程分支
$ git push origin --delete <远程分支名>
$ git push origin --delete develop
# 如果省略本地分支名,则表示删除指定的远程分支
# 因为这等同于推送一个空的本地分支到远程分支
$ git push origin :<远程分支名>
$ git push origin :develop

2.3 推送tag

# 推送某个tag到远程
$ git push <远程主机名> tagname
# 推送所有tag到远程
$ git push <远程主机名> --tags
# 把所有tag推送到远程仓库
$ git push origin --tags

演示:

# master分支创建tag
$ git tag -a v0.1 -m "version 0.1 released"

$ git tag
v0.1

$ git push origin v0.1
Counting objects: 1, done.
Writing objects: 100% (1/1), 163 bytes | 163.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To https://gitee.com/zsx242030/um.git
 * [new tag]         v0.1 -> v0.1

2.4 删除tag

# 删除远程tag
# 删除的话先删除本地的tag,然后再删除远程的
$ git push origin :refs/tags/[tagName]

演示:

$ git tag -d v0.1
Deleted tag 'v0.1' (was 6b7bd2b)

$ git tag

$ git push origin :refs/tags/v0.1
remote: Powered by GITEE.COM [GNK-6.4]
To https://gitee.com/zsx242030/um.git
 - [deleted]         v0.1
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。