CSDN GitHub
Git 远程操作详解 AderXCoding/system/tools

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作

因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 也欢迎大家提供一些其他好的调试工具以供收录, 鄙人在此谢谢啦

Git 是目前最流行的版本管理系统, 学会 Git 几乎成了开发者的必备技能.

Git 有很多优势, 其中之一就是远程操作非常简便. 本文详细介绍 5Git 命令, 它们的概念和用法, 理解了这些内容, 你就会完全掌握 Git 远程操作.

git clone
git remote
git fetch
git pull
git push

本文针对初级用户, 从最简单的讲起, 但是需要读者对 Git 的基本用法有所了解. 同时, 本文覆盖了上面 5 个命令的几乎所有的常用用法, 所以对于熟练用户也有参考价值.

1 git clone


远程操作的第一步, 通常是从远程主机克隆一个版本库, 这时就要用到 git clone 命令.

git clone <版本库的网址>

比如, 克隆 jQuery 的版本库.

git clone https://github.com/jquery/jquery.git

该命令会在本地主机生成一个目录, 与远程主机的版本库同名. 如果要指定不同的目录名, 可以将目录名作为 git clone 命令的第二个参数.

git clone <版本库的网址> <本地目录名>

git clone 支持多种协议, 除了 HTTP(s) 以外, 还支持 SSHGit、本地文件协议等, 下面是一些例子.

git clone http[s]://example.com/path/to/repo.git/git clone ssh://example.com/path/to/repo.git/git clone git://example.com/path/to/repo.git/git clone /opt/git/project.git git clone file:///opt/git/project.gitgit clone ftp[s]://example.com/path/to/repo.git/git clone rsync://example.com/path/to/repo.git/

SSH 协议还有另一种写法.

git clone [user@]example.com:path/to/repo.git/

通常来说, Git 协议下载速度最快, SSH 协议用于需要用户认证的场合. 各种协议优劣的详细讨论请参考官方文档.

2 git remote


为了便于管理, Git 要求每个远程主机都必须指定一个主机名.

git remote 命令就用于管理主机名.

不带选项的时候, git remote 命令列出所有远程主机。

git remote origin

使用 -v 选项, 可以参看远程主机的网址.

git remote -v
origin  git@github.com:jquery/jquery.git (fetch)
origin  git@github.com:jquery/jquery.git (push)

上面命令表示, 当前只有一台远程主机, 叫做 origin, 以及它的网址.

克隆版本库的时候, 所使用的远程主机自动被 Git 命名为origin. 如果想用其他的主机名, 需要用 git clone 命令的 -o 选项指定.

git clone -o jQuery https://github.com/jquery/jquery.git
git remote jQuery

上面命令表示, 克隆的时候, 指定远程主机叫做 jQuery.

git remote show 命令加上主机名, 可以查看该主机的详细信息.

git remote show <主机名>

git remote add 命令用于添加远程主机。

git remote add <主机名> <网址>
git remote rm命令用于删除远程主机。
git remote rm <主机名>
git remote rename命令用于远程主机的改名。
git remote rename <原主机名> <新主机名>

3 git fetch


一旦远程主机的版本库有了更新( Git 术语叫做 commit), 需要将这些更新取回本地, 这时就要用到 git fetch 命令.

git fetch <远程主机名>

上面命令将某个远程主机的更新, 全部取回本地.

git fetch 命令通常用来查看其他人的进程, 因为它取回的代码对你本地的开发代码没有影响.

默认情况下,git fetch 取回所有分支(branch)的更新. 如果只想取回特定分支的更新, 可以指定分支名.

git fetch <远程主机名> <分支名>

比如, 取回 origin 主机的 master 分支.

git fetch origin master

所取回的更新, 在本地主机上要用 “远程主机名/分支名”的形式读取. 比如 origin 主机的 master, 就要用 origin/master 读取.

git branch 命令的 -r 选项, 可以用来查看远程分支, -a 选项查看所有分支.

git branch -r origin/master
git branch -a* masterremotes/origin/master

上面命令表示, 本地主机的当前分支是 master, 远程分支是 origin/master.

取回远程主机的更新以后, 可以在它的基础上, 使用 git checkout 命令创建一个新的分支.

git checkout -b newBrach origin/master

上面命令表示, 在 origin/master 的基础上, 创建一个新分支.

此外, 也可以使用 git merge 命令或者 git rebase 命令, 在本地分支上合并远程分支.

git merge origin/master
# 或者
git rebase origin/master

上面命令表示在当前分支上, 合并 origin/master

4 git pull


git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。

git pull <远程主机名> <远程分支名>:<本地分支名>

比如, 取回 origin 主机的 next 分支, 与本地的 master 分支合并, 需要写成下面这样.

git pull origin next:master

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

git pull origin next

上面命令表示, 取回 origin/next 分支, 再与当前分支合并. 实质上, 这等同于先做 git fetch, 再做 git merge.

git fetch origin
git merge origin/next

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

Git 也允许手动建立追踪关系.

git branch --set-upstream master origin/next

上面命令指定 master 分支追踪 origin/next 分支.

如果当前分支与远程分支存在追踪关系, git pull 就可以省略远程分支名.

git pull origin

上面命令表示, 本地的当前分支自动与对应的 origin 主机 “追踪分支”(remote-tracking branch)进行合并.

如果当前分支只有一个追踪分支, 连远程主机名都可以省略.

git pull

上面命令表示, 当前分支自动与唯一一个追踪分支进行合并.

如果合并需要采用 rebase模式, 可以使用 --rebase 选项.

git pull --rebase <远程主机名> <远程分支名>:<本地分支名>

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

但是, 你可以改变这个行为, 加上参数 -p 就会在本地删除远程已经删除的分支.

git pull -p等同于下面的命令git fetch --prune origin
git fetch -p

5 git push


git push 命令用于将本地分支的更新, 推送到远程主机. 它的格式与 git pull 命令相仿。

git push <远程主机名> <本地分支名>:<远程分支名>

注意, 分支推送顺序的写法是 <来源地>:<目的地>, 所以 git pull是<远程分支>:<本地分支>, 而 git push是<本地分支>:<远程分支>.

如果省略远程分支名, 则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名), 如果该远程分支不存在,则会被新建.

git push origin master

上面命令表示, 将本地的 master 分支推送到 origin 主机的 master 分支. 如果后者不存在, 则会被新建.

如果省略本地分支名, 则表示删除指定的远程分支, 因为这等同于推送一个空的本地分支到远程分支.

git push origin :master# 等同于
git push origin --delete master

上面命令表示删除 origin 主机的 master 分支.
如果当前分支与远程分支之间存在追踪关系, 则本地分支和远程分支都可以省略.

git push origin

上面命令表示, 将当前分支推送到 origin 主机的对应分支.

如果当前分支只有一个追踪分支, 那么主机名都可以省略.

git push

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

git push -u origin master

上面命令将本地的 master 分支推送到 origin 主机, 同时指定 origin 为默认主机, 后面就可以不加任何参数使用 git push 了.

不带任何参数的 git push, 默认只推送当前分支, 这叫做 simple方式. 此外, 还有一种 matching 方式, 会推送所有有对应的远程分支的本地分支.

Git 2.0 版本之前, 默认采用 matching 方法, 现在改为默认采用 simple 方式. 如果要修改这个设置, 可以采用 git config 命令.

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

还有一种情况, 就是不管是否存在对应的远程分支, 将本地的所有分支都推送到远程主机, 这时需要使用 --all 选项.

git push --all origin

上面命令表示, 将所有本地分支都推送到 origin 主机.

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

git push --force origin

上面命令使用 --force 选项, 结果导致远程主机上更新的版本被覆盖. 除非你很确定要这样做, 否则应该尽量避免使用 --force 选项.

最后, git push 不会推送标签(tag), 除非使用 --tags 选项.

git push origin --tags

6 总结


Git 常见命令一览表 :

说明/备注 命令 备注
保存更新 git add [-i] -i 逐个确认
检查更新 git status
提交更新 git commit [-a] -m “<更新说明>” -a 包含增删
-m 说明信息
克隆到本地 git clone
远端抓取 git fetch
与本地当前branch合并 git merge
抓取并合并 git pull [<远端别名>] [<远端branch>] 相当于 git fetch + git merge
推送到远端 git push [-f] [<远端别名>] [<远端branch>] -f 强制覆盖
设置一个远端别名 git remote add <别名>
列出远端 git remote -v -v 详细信息
查看远端信息 git remote show <远端别名>
重命名远端 git remote rename <远端别名> <新远端别名>
删除远端 git remote rm <远端别名>
更新branch列表 git remote update [<远端别名>]
列出branch git branch [-r] [-a] -r 远端 -a 全部
新建branch git branch

Git 远程库操作详解相关推荐

  1. Git 常用命令操作详解

    Git常用命令 Git提供了很多命令来完成相应的操作,为了方便学习,我们将这些命令进行了分类.在学习命令的过程中会讲解一些Git相关的概念. 在本章节我们会学习到如下一些命令和概念: 环境配置 获取G ...

  2. git常用命令操作详解(gitblit自建服务器使用)

    第一部分,推送本地 git config --global user.email  "you@example.com"  //设置本机的邮箱地址 git config --glob ...

  3. Git命令行操作详解

    Git简介 是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制 ...

  4. Git 远程操作详解(再不会 Git 就真的没团队收你了,嗯哼)

    Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就会完全掌握Gi ...

  5. Git实战:branch分支操作详解

    什么是分支 分支是指在主干道上分支的支线,可以前往不同的地方,也可以到达相同的终点(只是实现的路线不同).Git指向团队开发中的个体,各开发者可以有自己的分支,开发时不会影响其他分支的开发进度.分支完 ...

  6. 最全整理!Python 操作 Excel 库 xlrd与xlwt 常用操作详解!

    来源/早起Python 在之前的Python办公自动化系列文章中,我们已经相信介绍了openyxl.xlsxwriter等Python操作Excel库. 相信大家对于几个库的差异与使用场景有了一定的认 ...

  7. python excel库pip install_超全整理|Python 操作 Excel 库 xlwings 常用操作详解!

    原标题:超全整理|Python 操作 Excel 库 xlwings 常用操作详解! 来源:早起Python 作者:陈熹.刘早起 大家好,我是早起. 在之前的文章中我们曾详细的讲解了如何使用openp ...

  8. DLL的远程注入技术详解

    DLL的远程注入技术详解 2008-12-01 20:28 DLL的远程注入技术是目前Win32病毒广泛使用的一种技术.使用这种技术的病毒体通常位于一个DLL中, 在系统启动的时候,一个EXE程序会将 ...

  9. Navicat的mysql远程登录方法详解

    Navicat的mysql远程登录方法详解 工具和前提 远程连接方法 疑惑问题 报错汇总 关闭并删除用户 引用 工具和前提 1.均在Navicat上面进行操作: 2.Navicat15的版本,本地数据 ...

最新文章

  1. Testing tools
  2. BurpSuite实例教程讲解
  3. 【运筹学】线性规划数学模型 ( 三要素 | 一般形式 | 向量形式 | 矩阵形式 )
  4. linux中用户的分类
  5. Docker管理面板Portainer中文汉化教程
  6. NEERC13 Problem H.Hack Protection
  7. 数据可视化【一】JavaScript学习
  8. poj1681 Painter's Problem高斯消元
  9. mybatis学习(48):列表信息查询
  10. Linux基础(3)--搭建最小的Linux系统
  11. VisualStudio2005技巧集合--打造自己的CodeSnippet
  12. Swift - 43 - 继承, 多态, 析构函数
  13. svn合并不同树_SVN分支与合并【超详细的图文教程】(转载)
  14. Nature论文插图复刻第1期—多组柱状图(Part2-456)
  15. Matlab模拟四旋翼飞行器PID控制仿真
  16. Lightingroom4_秋凉教程 P3-P31笔记
  17. 关于裁员几点看法及建议
  18. 最新在线客服系统php代码微信软件公众号小程序app二维码聊天网站源码
  19. 技术选型电商平台系统的四大方向
  20. 复旦python课补考_复旦学姐说:“这段科研,最终帮助我这个零经验小白拿下了量化岗实习!”...

热门文章

  1. crazyflie学习(4):crazyflie飞行与日志
  2. 在 VS Code 中阅读 G-code 及 3D 打印机 gcode 常用指令介绍
  3. 微信小程序 页面刷新的方法
  4. 在express项目中使用formidable multiparty实现文件上传
  5. android 6.0 连接电脑,华为mate7手机EMUI4.0安卓6.0连接电脑方法
  6. AP+AC旁挂式组网(简单易懂!新手必看!)
  7. 【分享】网络游戏加速的实现
  8. 汇编语言基础知识(自用,是纯知识点概念)
  9. 麒麟子Cocos Creator 3D研究笔记七:骨骼动画上的挂接点
  10. 【Mac】破解死循环,成功安装 Homebrew、curl、wget,快速配置 zsh