Git 远程库操作详解
CSDN | GitHub |
---|---|
Git 远程操作详解
|
AderXCoding/system/tools
|
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作
因本人技术水平和知识面有限, 内容如有纰漏或者需要修正的地方, 欢迎大家指正, 也欢迎大家提供一些其他好的调试工具以供收录, 鄙人在此谢谢啦
Git
是目前最流行的版本管理系统, 学会 Git
几乎成了开发者的必备技能.
Git
有很多优势, 其中之一就是远程操作非常简便. 本文详细介绍 5
个 Git
命令, 它们的概念和用法, 理解了这些内容, 你就会完全掌握 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)
以外, 还支持 SSH
、Git
、本地文件协议等, 下面是一些例子.
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 远程库操作详解相关推荐
- Git 常用命令操作详解
Git常用命令 Git提供了很多命令来完成相应的操作,为了方便学习,我们将这些命令进行了分类.在学习命令的过程中会讲解一些Git相关的概念. 在本章节我们会学习到如下一些命令和概念: 环境配置 获取G ...
- git常用命令操作详解(gitblit自建服务器使用)
第一部分,推送本地 git config --global user.email "you@example.com" //设置本机的邮箱地址 git config --glob ...
- Git命令行操作详解
Git简介 是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制 ...
- Git 远程操作详解(再不会 Git 就真的没团队收你了,嗯哼)
Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能. Git有很多优势,其中之一就是远程操作非常简便.本文详细介绍5个Git命令,它们的概念和用法,理解了这些内容,你就会完全掌握Gi ...
- Git实战:branch分支操作详解
什么是分支 分支是指在主干道上分支的支线,可以前往不同的地方,也可以到达相同的终点(只是实现的路线不同).Git指向团队开发中的个体,各开发者可以有自己的分支,开发时不会影响其他分支的开发进度.分支完 ...
- 最全整理!Python 操作 Excel 库 xlrd与xlwt 常用操作详解!
来源/早起Python 在之前的Python办公自动化系列文章中,我们已经相信介绍了openyxl.xlsxwriter等Python操作Excel库. 相信大家对于几个库的差异与使用场景有了一定的认 ...
- python excel库pip install_超全整理|Python 操作 Excel 库 xlwings 常用操作详解!
原标题:超全整理|Python 操作 Excel 库 xlwings 常用操作详解! 来源:早起Python 作者:陈熹.刘早起 大家好,我是早起. 在之前的文章中我们曾详细的讲解了如何使用openp ...
- DLL的远程注入技术详解
DLL的远程注入技术详解 2008-12-01 20:28 DLL的远程注入技术是目前Win32病毒广泛使用的一种技术.使用这种技术的病毒体通常位于一个DLL中, 在系统启动的时候,一个EXE程序会将 ...
- Navicat的mysql远程登录方法详解
Navicat的mysql远程登录方法详解 工具和前提 远程连接方法 疑惑问题 报错汇总 关闭并删除用户 引用 工具和前提 1.均在Navicat上面进行操作: 2.Navicat15的版本,本地数据 ...
最新文章
- Testing tools
- BurpSuite实例教程讲解
- 【运筹学】线性规划数学模型 ( 三要素 | 一般形式 | 向量形式 | 矩阵形式 )
- linux中用户的分类
- Docker管理面板Portainer中文汉化教程
- NEERC13 Problem H.Hack Protection
- 数据可视化【一】JavaScript学习
- poj1681 Painter's Problem高斯消元
- mybatis学习(48):列表信息查询
- Linux基础(3)--搭建最小的Linux系统
- VisualStudio2005技巧集合--打造自己的CodeSnippet
- Swift - 43 - 继承, 多态, 析构函数
- svn合并不同树_SVN分支与合并【超详细的图文教程】(转载)
- Nature论文插图复刻第1期—多组柱状图(Part2-456)
- Matlab模拟四旋翼飞行器PID控制仿真
- Lightingroom4_秋凉教程 P3-P31笔记
- 关于裁员几点看法及建议
- 最新在线客服系统php代码微信软件公众号小程序app二维码聊天网站源码
- 技术选型电商平台系统的四大方向
- 复旦python课补考_复旦学姐说:“这段科研,最终帮助我这个零经验小白拿下了量化岗实习!”...
热门文章
- crazyflie学习(4):crazyflie飞行与日志
- 在 VS Code 中阅读 G-code 及 3D 打印机 gcode 常用指令介绍
- 微信小程序 页面刷新的方法
- 在express项目中使用formidable multiparty实现文件上传
- android 6.0 连接电脑,华为mate7手机EMUI4.0安卓6.0连接电脑方法
- AP+AC旁挂式组网(简单易懂!新手必看!)
- 【分享】网络游戏加速的实现
- 汇编语言基础知识(自用,是纯知识点概念)
- 麒麟子Cocos Creator 3D研究笔记七:骨骼动画上的挂接点
- 【Mac】破解死循环,成功安装 Homebrew、curl、wget,快速配置 zsh