git 学习笔记 —— 获取远端分支并修改后提交至远端仓库
笔者最近进行开发过程中,所有参与者的代码需要通过 git 上传到远端仓库中,不同的模块对应不同的 git 分支,不同模块的数据需要从远端仓库中获取。这里记录下笔者从远端仓库中获取分支数据,进行修改,最后重新上传同步分支数据的过程。
注:对于本地不存在 git 仓库的情况,要么直接通过 git clone 命令获取对应的远端整个仓库,此时获得远端仓库的所有数据,要么可以选择一个目录,通过 git init 命令将该目录初始化为一个空的 git 仓库,之后再根据下文描述的步骤获取仓库数据(可以单独获取仓库的某一分支的数据)。
Index
1.添加远端仓库信息 - git remote add/remove
3.本地创建/切换分支 - git checkout/branch
4.本地工作及修改 - git add/commit/status
1. 添加远端仓库信息 —— git remote add/remove
用户可通过 git remote add 命令添加一个远程仓库的信息。一般平台如 github 页面首页的右上角都包含有 clone 按钮,点击即可获得仓库对应的 url .
git remote add name url //添加一个远程仓库,命名为 name ,其对应资源地址由 url 指定
如下命令即添加了一个远程仓库,并将其命名为 test . 之后可以直接通过名字 test 来进行远程仓库的管理工作。当用户使用 git clone 命令获取一个远程仓库数据时,git 会将该远程仓库默认命名为 origin,用户可以通过 git clone 的 -o 命令指定远程仓库的名字 。
git remote add test https://github.com/schacon/simplegit-progit //添加远程仓库 test,其 url 如命令所示
git clone -o test https://github.com/schacon/simplegit-progit //下载远程仓库数据至本地,远程仓库名被命名为 test
对应的,用户可以通过 git remote remove 来删除远程仓库的信息。
git remote remove test //删除 test 对应的远程仓库的信息
注意 git remote add 命令仅仅配置了远程仓库的 url 等信息,并没有获取对应的仓库数据。用户可以通过 git remote 命令查看已经添加了的远程仓库信息。
git remote //显示当前已有的所有仓库的名称
git remote -v //显示详细的仓库信息,包括仓库名称和对应的 url 等
git remote show test //显示远程仓库 test 的详细信息
2. 获取远程仓库的数据 —— git fetch
在设置好远程仓库的信息后,即可将远程仓库的数据拉取到本地。这里主要通过 git fetch 命令获取远端仓库更新的数据( 即相对于上一次 git fetch 而言新增的修改,若本次为第一次获取该分支数据,则获取该分支的所有数据)。
git fetch test //直接使用时,获取 test 对应远程仓库的所有新增修改(即所有分支的修改数据)
git fetch test test1 //加入分支名参数,表示获取 test 对应远程仓库的 test1 分支的新增修改数据
取回本地的数据均通过 仓库名/分支名 的方式使用,如上述获取的分支数据即为 test/test1.注意,git fetch 命令仅将分支数据取回到本地但并不会自动切换到上述分支数据中。
图示为笔者通过 git fetch 命令取回 origin 仓库对应的 MD5sum 分支的数据,其本地数据名称为 origin/MD5sum .
注意,git fetch 仅取回本地相对于上一次 git fetch 时远端仓库新增的修改,故而 git fetch 命令并不一定会获得整个 origin/MD5sum 所包含的文件数据,假如本地仓库之前已经获取过 origin/MD5sum 分支的数据,则再次运行 git fetch 只会获得远端仓库新增的修改,而不是整个项目。
若之前已经通过 git fetch 命令获取了数据,则再次运行 git fetch 命令时仅获取远端仓库的增量部分,此时可以先切换到该远端分支对应的本地分支(切换分支方法见点3),再通过 git merge 命令将新增的修改与之前存在的数据融合,此时获得融合了 origin/MD5sum 新修改的数据。
git merge origin/MD5sum //合并远端仓库的 MD5sum 分支到当前分支
新手暴力方法:如果之前在命令行实验中 git fetch 取回了远端数据,即本地已经有了对应分支的数据,则再次执行 git fetch 时获取的只是相对于上一次获取数据时新增的数据(如发生了改动的单个文件)。在不熟悉其他命令情况下,想要在一个新的文件夹中获取该分支完整的代码,可以暂时使用暴力操作方法,可以参考暴力获取完整仓库分支数据的方法。
3.本地创建/切换分支 —— git checkout/branch
在获取数据后,需要进行分支切换进而使用上述数据,并以此为基础进行编辑工作。有两种选择,一种是将上述获取的数据融合到当前分支中,一种是开始一个新的本地分支,并以此分支为基础进行对应的修改。笔者这里选择的是第二种,即开始一个新的分支,并在此分支上进行的修改( 在第一次获取该远程仓库分支时,由于之前本地不存在相应的数据,因此获取的是该远端分支所有的数据,而不是增量,比较适合第二种情况 )。开始/切换新的分支可以使用 git checkout 命令,其最后一个参数可用于指定分支的开始点。
git checkout name //切换到分支 name
git checkout -b name //创建并切换到 name 分支
git checkout -b name origin/test //切换到 bame 分支,并设置开始点为 origin/test 分支
如笔者通过如下命令切换到新的 MD5sum 分支,并以远程仓库获取的 origin/MD5sum 分支数据作为开始点。(若想在当前分支上进行修改,则需要通过 git merge或 git rebase 将 origin/MD5sum 数据合并到当前本地分支中,再进行操作,这里不做介绍)
git checkout -b MD5sum origin/MD5sum //创建新分支,并以 origin/MD5sum 作为开始点
在创建新分支的同时,该分支还同时被设定"追踪"( track )远端分支 origin/MD5sum。建立上述追踪关系后, MD5sum 分支默认的 git pull / push 命令的默认远端仓库分支即为 origin/MD5sum.
用户可以通过 git branch 命令查看目前已有的分支情况,并对分支进行管理。注意, git branch 命令只能创建分支,并不会自动进行分支的切换。用户总是需要通过 git checkout 命令手动切换所在分支。
git branch //查看本地分支, * 表示当前所在分支,使用 -v 参数则会显示各分支最后一次提交
git branch -a //查看本地和远端仓库的所有分支
git branch test //新建名为 test 的本地分支,-d 参数表示删除某个分支
笔者通过 git branch 查看的输出如下,可以看到此时笔者已经位于本地 MD5sum 分支下。
若之前已经通过 git fetch 命令获取了数据,则再次运行 git fetch 命令时仅获取远端仓库的增量部分,此时可以先切换到该分支对应的本地分支,再通过 git merge 命令将新增的修改与之前存在的数据融合,此时获得融合了 origin/MD5sum 新修改的数据。
git merge origin/MD5sum //合并远端仓库的 MD5sum 分支到当前分支
4.本地工作及修改 —— git status/add/commit
在本地对 MD5sum 分支进行修改和提交借助 git 的如 git status/add/commit 命令。简单而言,可以通过 git status 命令跟踪各个文件的状态,通过 git add 命令将修改后的文件加入待提交状态,通过 git commit 将待提交状态的修改提交,具体的 git 命令和含义可以参考笔者的另一篇文章 git 学习记录—— git 中的仓库、文件状态、修改和提交操作等。这里即注意本地的 git commit 都是将修改提交保存在本地,若想要数据与远程仓库同步,还需要将本地修改提交到远程仓库。
5.推送数据到远端仓库 —— git push
在本地修改数据并提交后,还需要将本地的修改推送至远端仓库的对应分支上。git 获取远端仓库时,会将远端仓库完整的项目拷贝至本地的计算机上,故而 git 中的绝大多数操作都是基于本地文件和资源,从而使得用户在离线情况下仍能以较快的速度对本地的项目数据库进行操作,如 git commit 命令即将本地的修改保存在本地仓库中,用户需在网络环境下进行本地与服务器端的同步。用户需要通过 git push 命令将本地修改推送到远端仓库的特定分支中。
可以使用 git push 将本地分支数据上传到远端仓库特定分支中,git push 命令的形式如下所示。
git push 远端仓库 x 本地分支 y : 远端分支 z //将本地的分支 y 推送到远端仓库 x 中的分支 z
在笔者的例子中,即将本地分支 MD5sum 的修改推送到远端仓库 origin 对应的 MD5sum 分支中,命令如下所示。
git push origin MD5sum:MD5sum //将本地分支 MD5sum 推送到 origin 对应的远端仓库的 MD5sum 分支中
git push 还有个特殊的写法,表示删除远端仓库的对应分支,写法与其基本用法一致,但本地分支名为空。
git push origin :MD5sum //删除 origin 对应的远端仓库的 MD5sum 分支,操作请谨慎
暴力获取完整仓库分支数据的方法:
(1) 在命令行或 git bash 环境下 ls -a 可以看到当前目录下有一个 .git 目录,该目录即为 git 仓库管理信息的目录,通过 rm -rf .git/ 即删除掉该目录,此时当前目录变为一个普通目录,而不再是仓库;
(2) 进入想要存放分支数据的新目录中,通过 git init 命令将该目录初始化为一个空的 git 仓库;
(3) 上述 git 仓库通过本文所描述的方法添加远程仓库的信息,并使用 git fetch 命令获取对应远程仓库分支的数据,此时由于本地仓库是空的,所以 git fetch 会取回远端仓库相对于上一次取回数据新增的修改( 本次 git fetch 即为第一次 fetch 操作),即整个分支全部的数据都为新增的修改,即分支数据被完整的取回本地;
(4) 使用本文的方法新增分支,并在该分支中进行远端获取的数据的修改;
参考资料:
git 拉取远程分支到本地 —— CSDN - git 获取远程仓库分支的文章,有图
Git远程操作详解 —— 阮一峰的博客 - 介绍了 git clone/remote/fetch/pull/push 命令的操作和原理
Git 基础 - 远程仓库的使用,Git 文档 - 远程仓库的描述,git 官方文档
Git 分支 - 远程分支,Git 文档 - git 远程仓库的描述,推荐阅读。介绍了某些命令的基本操作
git提交本地分支到远程分支—— cnblog - 提交本地分支到远程分支
Git - 分支的新建与合并 - git 文档关于分支的建立和合并操作,推荐
Git 少用 Pull 多用 Fetch 和 Merge - oschina
git 学习笔记 —— 获取远端分支并修改后提交至远端仓库的更多相关文章
- Git学习笔记(3)——撤销修改和文件的删除
本文主要记录了git中,错误的撤销和文件的删除. 撤销修改 这里有3中情况 改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file. 不但改乱了工作区某个 ...
- git学习笔记06-创建分支合并分支-比svn快多了,因为只有指针在改变
一开始git只有一条时间线,这个分支叫主分支,即master分支. HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支. 每次提交,mas ...
- git学习笔记二-branch分支
1.刚创建好的空仓库的分支是空的,即使是master分支也是不存在的.master分支是不能通过git branch 来创建的,只有在完成第一次提交才会自动创建,有git自动完成master分子的创建 ...
- git 学习笔记 —— 保留/丢弃当前分支修改并切换至其他分支
笔者在本地终端进行 git 工作目录的相关处理时,遇到由于某种情况需要使用 git checkout 命令切换到其他分支的情景.此时,若已经对当前分支做了一定的修改,则直接切换分支时 git 会提示错 ...
- Git学习笔记3-远程仓库
1.添加远程仓库 $ git remote add [shortname] [url] $ git remote add origin https://github.com/Mike199201/Gi ...
- git学习笔记之二 -- git分支
前面对git基础作了简单的总结,这次对git的杀手锏--分支做一总结. Git分支简介 几乎每个版本控制系统都以某种形式支持分支,可以使你的工作从开发主线上分离开来,以免影响开发主线.很多版本控制系统 ...
- GIT学习笔记(4):远程分支
GIT学习笔记(4):远程分支 远程分支 远程分支是什么 远程分支是对远程仓库中的分支的索引.它们是一些无法移动的本地分支:只有在GIT进行网络交互时才会更新.远程分支就是书签,提醒着你上次连接远程仓 ...
- GIT学习笔记(3):分支管理
GIT学习笔记(3):分支管理 何谓分支 GIT是如何存储数据的 GIT不是存储文件差异或者变化量,而是一系列文件的快照.在Git提交时,会保存一个提交(commit)对象,该对象包含一个指向暂存内容 ...
- Git学习笔记(5)——分支管理
本文主要记录了分支的原理.分支的创建,删除,合并.以及分支的使用策略. 分支在实际中的作用 假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不 ...
随机推荐
- ASP.NET Core使用Docker-Swarm集群部署实现负载均衡实战演练
一.需求背景 人生苦短,我用.NET Core!阿笨对Docker是这样评价的:Docker在手,环境我有!Docker出手,集群我有!前面的Doc基础课程我们学习了如何使用Docker来部署搭建单机 ...
- myeclipse导入项目后中文乱码
window----preference ----general-----workspace-------text file encoding 可以多测试下:gbk,utf-8.....
- 修改Centos7用户默认家目录
vim /etc/default/useradd # useradd defaults file GROUP= HOME=/home INACTIVE=- EXPIRE= SHELL=/bin/bas ...
- python解决使用镜像源来安装包
一.问题在进行python包安装的时候出现一个问题就是无法进行安装,且出现了如下的错误 报错代码 Retrying (Retry(total=4, connect=None, read=None, r ...
- ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(一)(转载)
本文结构 ASP.NET Core应用程序的构建 ASP.NET Core应用程序容器化所需注意的问题 应用程序的配置信息 端口侦听 ASP.NET Core的容器版本 docker镜像构建上下文(B ...
- 备忘】HttpContextAccessor类
AspNetCore / src / Http / Http / src / HttpContextAccessor.cs // Copyright (c) .NET Foundation. All ...
- C# vb .net图像合成-合成矩形
在.net中,如何简单快捷地实现图像合成呢,比如合成文字,合成艺术字,多张图片叠加合成等等?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码 ...
- js/jquery键盘事件及keycode大全
js/jquery的键盘事件分为keypress.keydown和keyup事件 一.键盘事件 1.keydown()事件当按钮被按下时,发生 keydown 事件. 2.keypress()事件ke ...
- python爬虫---单线程+多任务的异步协程,selenium爬虫模块的使用
python爬虫---单线程+多任务的异步协程,selenium爬虫模块的使用 一丶单线程+多任务的异步协程 特殊函数 # 如果一个函数的定义被async修饰后,则该函数就是一个特殊的函数 async ...
- Scheduling Tasks
官方文档 https://spring.io/guides/gs/scheduling-tasks/ 官方文档详细介绍了@Scheduled中fixedRate,fixedDelay,cron的用法 ...