Git远程操作

Posted okokabcd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git远程操作相关的知识,希望对你有一定的参考价值。

技术分享图片

1 git clone

1.1 克隆远程库

# https协议
git clone https://github.com/yysue/test.git

# ssh协议 推荐这种
git clone [email protected]:yysue/test.git

克隆时,指定远程主机名

git clone -o test [email protected]:yysue/test.git
# -o 指定远程主机名,默认是origin

2 git remote

2.1 列出所有远程主机

git remote -v
# -v显示远程主机的网址
# origin [email protected]:yysue/test.git 表示远程主机及它的网址

技术分享图片

2.2 查看主机详细信息

# 查看主机详细信息
git remote show origin

技术分享图片

2.3 添加远程主机

# 添加远程主机,注意这里的url是gitee.com
git remote add for_rm [email protected]:yysue/test.git
git remote add for_rename [email protected]:yysue/test.git

# 添加之后,查看一下远程主机
git remote -v

技术分享图片

2.4 删除,重命名远程主机

# 删除远程主机
git remote rm for_rm

# 重命名远程主机
git remote rename for_rename gitee_origin

# 修改之后,查看一下远程主机
git remote -v

技术分享图片

3 git fetch

3.1 将远程主机的更新取回本地

git fetch <远程主机名> <分支名> 
# 取回特定分支需要指定分支名
# 将某个远程主机的更新全部取回本地

git fetch <远程主机名> 
# 默认取回所有分支的更新

git fetch
# 默认取回origin主机的所有分支

3.2 查看远程分支

git branch -r
# -r查看远程分支
# 在本地主机上要用"远程主机名/分支名"的形式表示远程分支,如origin/master

技术分享图片

3.3 查看所有分支

git branch -a
# -a查看所有分支
# 本地主机的当前分支是master,远程分支是origin/master

技术分享图片

3.4 以某分支为基础,创建新分支

git checkout -b dev origin/master
# 以远程主机origin上的master分支为基础创建分支dev并切换到分支dev

4 git pull

4.1 合并分支

git pull <远程主机名> <远程分支名>:<本地分支名>
# 这是完整格式 取回远程主机的某个分支的更新,再与本地的指定分支合并

git pull origin next
# 省略<本地分支名>表示与当前分支合并
# 取回origin/next分支,再与当前分支合并
# 等同于如下两个操作
git fetch origin
git merge origin/master

git pull origin
# 如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名
# 本地的当前分支自动与对应的origin主机进行合追踪分支(remote-tracking branch)进行合并

git pull
# 如果当前分支只有一个追踪分支,连远程主机名都可以省略
# 当前分支自动与唯一一个追踪分支进行合并
# 默认git pull <===> git pull origin master:master
# 默认远程主机为origin,远程分支为master,本地分支为master

git pull --rebase
# 等同于如下两个操作
git fetch origin
git rebase origin/master

4.2 追踪关系

在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动追踪origin/master分支。

手动建立追踪关系

git branch --set-upstream master origin/next
# 指定master分支追踪origin/next分支

4.3 本地同步删除分支

如果远程主机删除了某个分支,默认情况下,git pull不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull不知不觉删除了本地分支

git pull -p
# -p 在本地删除远程已经删除的分支
# 等同于下面的命令
git fetch --prune origin
git fetch -p

4.4 git merge

假设初始的分支情况如下图:

技术分享图片

# A在mywork上的操作
git checkout -b mywork origin
echo 'a' >> a.txt
git commit -am 'update a.txt'
echo 'b' >> b.txt
git commit -am 'update b.txt'

# B在origin/master上的操作
echo 'c' >> c.txt
git commit -am 'update c.txt'
echo 'd' >> d.txt
git commit -am 'update d.txt'
git push

技术分享图片

下面来区分git mergegit rebase的区别

在这里,你可以用"pull"命令把"origin"分支上的修改拉下来并且和你的修改合并; 结果看起来就像一个新的"合并的提交"(merge commit):

# A在mywork上操作
git pull

技术分享图片

4.5 git rebase

但是,如果你想让"mywork"分支历史看起来像没有经过任何合并一样,你也许可以用 git rebase:

git checkout mywork
git rebase origin

这些命令会把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到"mywork"分支上。

当‘mywork‘分支更新之后,它会指向这些新创建的提交(commit),而那些老的提交会被丢弃。 如果运行垃圾收集命令(pruning garbage collection), 这些被丢弃的提交就会删除. (请查看 git gc)

技术分享图片

技术分享图片

5 git push

5.1 将本地的更新推送到远程主机

git push <远程主机名> <本地分支名>:<远程分支名>
# 分支推送顺序写法是<来源地>:<目的地>
# git pull <远程分支>:<本地分支>
# git push <本地分支>:<远程分支>

git push origin master
# 省略<远程分支名>
# 将本地的master分支推送到origin主机的master分支,如果后者不存在,则会被新建

git push origin :master
# 省略<本地分支名>
# 表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支
# 等同于下面的命令,删除origin主机的master分支
git push origin --delete master

git push origin
# 如果当前分支与远程分支存在追踪关系,则<本地分支名>和<远程分支名>都可省略
# 将当前分支推送到origin主机的对应分支

git push
# 当前分支只有一个追踪分支,主机名也可以省略

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

5.2 push默认模式

不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。如果要修改这个设置,可以采用git config命令。

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

5.3 推送所有本地分支

不管是否存在对应的远程分支,将本地的所有分支推送到远程主机,这时需要使用--all选项。

git push --all
# 将所有本地分支推送到远程主机

5.4 强制覆盖远程版本

如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用--force选项。

git push --force
# 本地版本覆盖远程版本,即使远程版本比本地版本新

5.5 推送标签

git push --tags
# --tags推送标签(tag),默认不推送

参考

以上是关于Git远程操作的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程

Git远程操作

Git远程仓库 复制到另一个远程仓库 并保留commit信息。关于Git代码提交到远程仓库怎么撤回。.gitignore。git pull 时提示为何需要merge操作如何退出

Git远程仓库 复制到另一个远程仓库 并保留commit信息。关于Git代码提交到远程仓库怎么撤回。.gitignore。git pull 时提示为何需要merge操作如何退出