git使用小结二: git的分支和远程仓库

上一篇文章介绍了git的本地基本操作,如果你不需要和他人协作,比如说你自己写一本书,自己写一个小程序,自己写个网站等等,那么已经差不多够用了。但是分享和协作才是自由世界的主题,git也正是为此而生,所以努力成为一个热爱分享和协作的同学吧!^_^

git的仓库的概念可以理解为git管理的那个文件夹,而git远程仓库可以理解为存放在服务器上的大家都可以用git访问的一个git管理的文件夹。(原谅我的大白话,虽然事实必定比这种解释高大上,不过我个人感觉这么理解也无伤大雅~)而要理解远程仓库,就需要理解分支,也就是branch,上一篇介绍的git log命令会列出一系列的commit,也就是保存的修改,那么可以理解这样的从头到尾的commit链条为一个branch,一个git仓库中可以有多个分支,而分支之间可以合并,可以在分支中的任意一个commit的位置新建一个分支,也就是说你可以以任意一个commit之后的状态为基础来进行新的修改,并且不影响之前的分支,就像树有很多树枝一样,可以长在任何地方,对其它树枝也没有影响。其实我想说git采用的是树的结构来管理commit的,每一个commit都是一个节点,有父节点也可以有子节点,而每个根节点到叶子节点的路径就可以理解为一个分支。我们对照着git命令一个个来看。

在实践接下来的命令之前,需要按照下面的oschina git仓库的教程进行个人账户的配置

http://git.oschina.net/oschina/git-osc/wikis/%E5%B8%AE%E5%8A%A9

?  Projects  git clone https://git.oschina.net/lrhehe/ddup.git 
Cloning into ‘ddup‘...
remote: Counting objects: 74, done.
remote: Compressing objects: 100% (51/51), done.
remote: Total 74 (delta 7), reused 0 (delta 0)
Unpacking objects: 100% (74/74), done.
Checking connectivity... done.

git clone <url> 命令是将远程的git仓库克隆到本地,这里是一个简单的正在开发中的个人小项目,刚好用来做例子。

?  Projects  cd ddup 
?  ddup git:(master) git status
On branch master
Your branch is up-to-date with ‘origin/master‘.

nothing to commit, working directory clean

进入到文件目录,查看一下当前的git状态,这里可以看到On branch master的提示,表明正在master分支,下一行的提示是说,你的分支和origin/master是同步的,这里的origin是远程仓库的名字,master是分支的名字,也就是说本地的master分支和远程仓库origin的master分支是同步的。使用git branch -vv 可以来查看这种本地分支和远程分支之间的联系。

?  ddup git:(master) git branch -vv
* master b6ca9bf [origin/master] MOD: new commit of common, change minSdk to 11 for honeyComb

这里说明了当前处在master分支,它的hash值的前7位是b6ca9bf,是与远程仓库origin的master分支同步的。这里同步的意思是说当你在git pull(把远程仓库的代码拉到本地) 和git push(把本地仓库的代码推到远程仓库)的时候,是操作的这两个对应的分支。如果你想一起开发,你添加了一个新的文件:

?  ddup git:(master) ? touch iamcoming.txt 
?  ddup git:(master) ? git add .
?  ddup git:(master) ? git commit -m "ADD: hello"
[master f8962a9] hello
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 iamcoming.txt

看一下git log:

?  ddup git:(master) git log
===========
commit f8962a956ef0f1811a944c454ac74e4b369d5961
Author: lrhehe <[email protected]>
Date:   Fri Mar 13 00:06:48 2015 +0800

    ADD: hello

已经提交了一个commit,那么现在我想发布到远程仓库,也就是分享给其它的小伙伴,我只需要git push即可

?  ddup git:(master) git push
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 270 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To https://git.oschina.net/lrhehe/ddup.git
   b6ca9bf..011c5a2  master -> master

这样远程仓库就更新了,不过如果你git push是不成功的,因为我关闭了master的非管理员push权限,如果你成功了,请及时联系我或是红薯大哥!因为mater分支通常是用来发布稳定的程序代码的,所以常见的做法是在本地建立一个分支来开发,当开发完成再合并到mater里面,再push到远程仓库进行分享。你可以这么做:

?  ddup git:(master) git branch test
?  ddup git:(master) git branch -a
* master
  test
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

git branch <name> 就能在当前commit下建立一个新的分支了,git branch -a 可以查看现有的所有分支,可见本地多了一个刚建的test,但是”*“标志告诉我们目前还在master分支下面,我们先git checkout到test下面:

?  ddup git:(master) git branch test
?  ddup git:(master) git checkout test
Switched to branch ‘test‘
?  ddup git:(test) git status
On branch test
nothing to commit, working directory clean

git checkout <branch name>可以切换到其它的branch,在新的branch上你就可以任意枉为了,

?  ddup git:(test) touch ladygaga.nb
?  ddup git:(test) ? git add .
?  ddup git:(test) ? git commit -m "ADD: nb Lady Gaga" 
[test 6289a5e] ADD: nb Lady Gaga
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 ladygaga.nb
?  ddup git:(test) git log
=========
commit 6289a5e635a01aa2be943e34c5c5a8d616863bef
Author: lrhehe <[email protected]>
Date:   Fri Mar 13 00:20:05 2015 +0800

    ADD: nb Lady Gaga

commit 011c5a276c0aa47390b7c026af7371a8f9b3b672
Author: lrhehe <[email protected]>
Date:   Fri Mar 13 00:06:48 2015 +0800

    ADD: hello

可见新的commit紧跟着之前的commit,我们再checkout到master分支上看看git log

?  ddup git:(test) git checkout master
Switched to branch ‘master‘
Your branch is up-to-date with ‘origin/master‘.
?  ddup git:(master) git log
=============
commit 011c5a276c0aa47390b7c026af7371a8f9b3b672
Author: lrhehe <[email protected]>
Date:   Fri Mar 13 00:06:48 2015 +0800

    ADD: hello

是不是发现之前的修改不在了,如果你在自己的分支开发完成,那么使用git merge就可以把个人分支的修改合并到当前分支上:

?  ddup git:(master) git merge test
Updating 011c5a2..6289a5e
Fast-forward
 ladygaga.nb | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 ladygaga.nb
?  ddup git:(master) git log
============
commit 6289a5e635a01aa2be943e34c5c5a8d616863bef
Author: lrhehe <[email protected]>
Date:   Fri Mar 13 00:20:05 2015 +0800

    ADD: nb Lady Gaga

commit 011c5a276c0aa47390b7c026af7371a8f9b3b672
Author: lrhehe <[email protected]>
Date:   Fri Mar 13 00:06:48 2015 +0800

    ADD: hello

瞬间master分支就合并了test分支的修改,接下来你只要git push即可分享自己修改的代码给大家了。

但是问题来了,如果你没有push到master的权限怎么办呢,你可以在个人分支下使用git push origin <branch name>来将当前的个人分支push到远程仓库origin,远程仓库origin会新建一个分支,而之后可以跟管理员说一声(略low啊~)来将分支合并到master。下面是个小例子。

?  ddup git:(master) git branch lrhehe
?  ddup git:(master) git checkout lrhehe 
Switched to branch ‘lrhehe‘
?  ddup git:(lrhehe) git push origin lrhehe
Total 0 (delta 0), reused 0 (delta 0)
To https://git.oschina.net/lrhehe/ddup.git
 * [new branch]      lrhehe -> lrhehe
?  ddup git:(lrhehe) git branch --set-upstream-to origin/lrhehe 
Branch lrhehe set up to track remote branch lrhehe from origin.
?  ddup git:(lrhehe) git branch -vv
* lrhehe b6ca9bf [origin/lrhehe] MOD: new commit of common, change minSdk...
  master b6ca9bf [origin/master] MOD: new commit of common, change minSdk...

至于怎么跟管理员说就随意了~^_^

时间: 2024-07-29 12:17:55

git使用小结二: git的分支和远程仓库的相关文章

使用git命令将本地项目推送到远程仓库

将本地项目推送到远程仓库 这里先放一张图, 有助于理解git命令 1. 在GitHub上新建一个仓库 注意不要勾选自动生成README.md文件, 否则会产生某些问题, README.md文件到时可以在本地项目文件夹内创新好, 再同步到远程仓库 2. 创建一个存储项目的文件夹, 并进入文件夹下 3.创建本地仓库 git init 4. 创建README.md 5. 同步远程仓库git remote add origin 'HTTPS' 备注: 'HTTPS'替换为仓库链接 6. 添加到Index

git入门学习(二):新建分支/上传代码/删除分支

一.git新建分支,上传代码到新的不同分支 我要实现的效果,即是多个内容的平行分支:这样做的主要目的是方便统一管理属于同一个内容的不同的项目,互不干扰.如图所示: 前提是我的github上已经有webpack_test项目了,我是在这个项目的基础上新建其他的分支并开展工作的.如图: 如果你对如何新建webpack_test项目不清楚,请参考我的前一篇文章:git入门学习(一):github for windows上传本地项目到github,操作步骤如下: 1.1.保留webpack_test项目

git 本地分支与远程仓库分支关联

当我们从远程仓库项目克隆到本地后,会自动创建本地master分支,并且与远程仓库主分支关联.如果我们需要在本地创建一个分支并且与远程仓库的origin/xxx分支关联,则可以通过以下命令实现 git checkout --track origin/xxx 可以使用以下命令查看关联情况 git branch -vv 原文地址:https://www.cnblogs.com/lwyang/p/10669950.html

Git——新手入门与上传项目到远程仓库GitHub(转)

Git概述 什么是Git? 刚开始对这个东西也感到挺迷茫,并且问了好多已经学习android一段时间的同学也是一头雾水,直到了解并使用之后,才体会到Git的好处以及重要意义. Git:是目前世界上最先进的分布式版本控制系统,一个开源式的分布式版本控制工具. 简单浅显地来说(就我个人而言),就是一个全球程序员的代码仓库集中地,每个人都可以在这里拥有一个自己的小仓库(注册一个独立的账号就可以了),你的代码可以一件一件的保存在这里,也可以分享给全球的程序猿同类们,所以即使你在本地对自己的项目随意删改(

Git新手入门与上传项目到远程仓库GitHub

本文介绍了楼主归纳整理的Git新手入门级用法以及如何成功地通过Git bash工具上传自己的项目到GitHub网站,算是学习心得笔记吧. 对于android开发者来说,一个github账号就相当于你的个人档案了,所以学会使用并管理好它还是十分重要的. Git概述 什么是Git? 刚开始对这个东西也感到挺迷茫,并且问了好多已经学习android一段时间的同学也是一头雾水,直到了解并使用之后,才体会到Git的好处以及重要意义. Git:是目前世界上最先进的分布式版本控制系统,一个开源式的分布式版本控

git 上传文件到 gitee 码云远程仓库

一 , 想将码云仓库里面的代码,抓取下来 1.git remote add origin 地址 2. git remote -v 3. it pull  origin master 二 , 将自己创建的文件加入暂存区 git add index.php 三 , 提交到本地,填写注释 git commit -m 'index.php wenjian' 四 ,将文件上传到远程仓库,有两种方式 1.git push origin master 2.git push -u origin master -

GIT入门笔记(14)- 链接到远程仓库

1.远程仓库地址https://github.com/ 2.注册远程仓库账号 3.生成ssh-key,并配置到github 由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置: 第1步:创建SSH Key.在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步.如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key: $ ssh-keyg

Git——新手入门与上传项目到远程仓库GitHub

Git:先进的分布式版本控制系统,一个开源式的分布式版本控制工具. Git安装 在Windows操作系统下,访问Git下载地址https://git-for-windows.github.io/ 注册登录github网站,建议配置SSH Keys连接GitHub,已经配置的可以略过 配置Git (1)本地创建ssh key :  $ ssh-keygen -t rsa -C "[email protected]" 后面的[email protected]改为你的邮箱,之后会要求确认路径

【Git】(1)---工作区、暂存区、版本库、远程仓库

工作区.暂存区.版本库.远程仓库 一.概念 1.四个工作区域 Git本地有四个工作区域:工作目录(Working Directory).暂存区(Stage/Index).资源库(Repository或Git Directory).git仓库(Remote Directory).文件在这四个区域之间的转换关系如下: Workspace: 工作区,就是你平时存放项目代码的地方 Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息 Reposit