git仓库管理、工作流程、远程操作、分支管理、基本命令

本文为git代码管理及命令操作的入门知识,讲述内容包括仓库管理、clone+fetch+pull+push的流程、远程操作、常规命令等。请批评指正。

第一部分:基础概念(针对新手,使用过git的请跳过)

1.1 git与github的区别

git是版本控制工具,借助此工具可以在本地仓库、公司git服务器或者开源免费的github远程仓库上管理软件版本。在多人协作的项目开发工作中十分普及。

github是免费的开源远程仓库。通俗点,就是有个免费的远程服务器(远程仓库),可以管理你的代码;如何与这个远程仓库进行交互,就需要靠git了。

1.2 本地仓库、远程仓库的区别

仓库repository就是管理项目代码的地方。顾名思义,本地仓库即存储路径在本地的仓库;远程仓库即通过ssh、https协议等连接进行管理的仓库。常见的远程仓库有公司自建的git服务器、github等。

1.3 分支branch的概念

分支概念示意图

                                                                                    图片引用自,如有需要,请查看原图

如上图,同一个项目需要多人协作,每人有不同的分工,所以就创建了不同的分支。在B处创建3个分支,最开始大家的代码都是一样的。然后每人各自在此基础上进行各自的工作,互不干扰。每个分支的代码就开始慢慢有些区别,然后就要进行合并,根据需要合并到对应的分支上(或者master)上,以满足项目需要求。

2 工作流程

                                                                           图片引用自阮一峰的网络日志,如有需要,请查看原图

图中,Remote指远程仓库,Repository指本地仓库,workspace指工作区(按照本图意思,workspace更像是分支,但又不太对),Index指缓存区。常见的工作流程如下:

<1> 在本地仓库上新建一个分支,默认有个master分支
<2> 在该分支上进行相应的修改操作等,操作完利用add将修改提交到index, 利用commit提交到本地仓库
<3> 本地仓库可以利用clone从远程仓库直接克隆整个代码库;或者利用fetch只抓取更新,并利用merge合并
<4> 本地仓库也可以利用pull拉取远程仓库的分支(获取他人更新的代码)
<5> 本地仓库修改后的代码可以push到远程仓库上

注:本人也是菜鸟,对这个图理解的不透彻,望懂得人指导下。按照我的理解,workspace应该是分支,
   但好像又不对。相信阮老师,他应该不会错的。只是我能力不够,理解不了。后期如果懂了,再更新。

 

3 本地仓库操作

(安装git,创建个人github账户后)从0开始的时候,首先要创建本地仓库。

#git init会默认创建master分支(应该理解为主支、主干)
#在当前目录新建仓库
$ git init
#创建新的目录,并初始化为代码库
$ git init [project name]
# 将远程仓库的代码clone进来
$ git clone [***.git]//可以使用https协议、ssh协议。不懂可以参考github上给的指令。

git init也可以更新当前已有的仓库。创建后可以发现当前目录里存在.git目录。

3.1 文件的操作

# git add系列用于将workspace分支中的文件添加到index暂存区(用语就以上图为例)
git add . //将当前目录中的文件提交到缓存区,此后同类文件的更改并不会commit到对应分支。
git add [filename]//同理,只是针对文件
git add [directory name]//同理,将递归将目录连同子目录添加到暂存区
git add -u //只加修改过的文件,新增文件不加入
git add -i //交互式处理
# git rm系列用于删除index暂存区的文件
git rm [filename]
# 重命令
git mv [old name] [new name]

3.2 提交到本地仓库

#提交缓存区的文件至本地仓库
$ git commit -m [message] //message 为标注信息,可不加
# 将所有修改后的文件全部提交
$ git commit -a
# 提交时展示对应的信息
$ git commit -v
# 提交至定的文件至本地仓库
$ git commit [files]

4 分支的创建与管理

刚才说到git init创建本地仓库的时候自动创建master分支。但是多人操作不能只在一个分支上干活,于是有分支的创建与管理

4.1 新建、删除分支

#列出当前所有branch
$ git branch
#创建新的branch
$ git branch [branch name] //没有特别指定, 会由目前所在的branch直接复制
$ git branch [branch name] master //由master复制出新的branch
#删除branch
$ git branch -d [branch name] //删除branch
$ git branch -D [branch name] //强制删除branch
$ git checkout -b [branch name] //产生新的branch, 并同时切换过去
#与remote repository有关
$ git branch -r //列出所有Repository branch
$ git branch -a //列出所有branch

4.2 切换分支

#切换到branch-name
$ git checkout [branch-name] 
#以现在的环境为基础, 建立新的branch
$ git checkout -b [newbranch] 

5 本地仓库、远程仓库的交互

local repository 与remote repository的交互,主要用处有:本地修改完代码,提交到远程仓库上;合并多分支的代码;将远程最新的代码拉到本地等。常用指令有clone, pull, fetch, push, merge等(merge是用于不同分支之间的)

5.1 clone

#克隆版本库,一条龙复制仓库、版本、分支等
$ git clone [url]
#克隆版本到指定目录
$ git clone [url] [dir]

5.2 remote

git remote 用于指定远程主机的名字,用于管理远程主机;方便管理,不然每次好长的名字

# 列出所有远程主机
$ git remote
# 查看远程主机的网址
$ git remote -v
# 查看主机详细信息
$ git remote show [host-name]
# 添加远程主机
$ git remote add [host-name] [url]
# 删除远程主机
$ git remote rm [host-name]

5.3 fetch

当远程仓库有更新时,利用fetch将更新同步到本地,切记只更新,不合并;合并需要使用merge

# 将仓库所有更新全部取回本地
$ git fetch [host-name]
# 将远程主机的特定分支更新到本地
$ git fetch [host-name] [branch-name]
# 查看远程分支
$ git branch -r
# 查看所有分支
$ git branch -a

5.4 merge / rebase

5.3是只更新没合并,这样远程仓库的修改行为是无法反映到本地仓库的,接下来就是合并了

#将远程主机hostname上的branchname分支合并到当前分支,两条指令都可以
$ git merge hostname/branchname
$ git rebase hostname/branchname

5.5 pull

git pull相当于先从远程仓库上更新,再合并。就是先操作git fetch ,再操作git merge

# 取回远程主机的分支更新,并与本地指定分支合并
$ git pull origin next:master //将origin主机的next分支更新并合并到本地的master分支
# 与当前分支合并时,可省略冒号后面的目标分支
$ git pull origin dev //将origin的dev分支更新并合并到当前分支
# 手动指定(追踪)本地分支与远程分支的关联
$ git branch --set-upstream-to=origin/next //当前分支关联到远程origin/next分支
# 如果当前分支与远程分支存在关联关系,git pull可以省略远程分支名,如:
$ git pull origin //系统会读取到跟踪关系,所以对应的分支名是可以省略的


# 当远程主机删除某个分支时,默认情况下,git pull 不会在拉取远程分支的时候删除本地仓库的对应分支。
# 但可以改变这个行为,加上参数 -p,如下:
$ git pull -p //当远程删除某个分支时,本地仓库会同步删除

5.6 push

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

# 本地分支的更新推到远程主机
$ git push [hostname] [local-branch]:[remote-branch]
$ git push origin src:dst //将本地的src分支推送到远程origin的dst分支
# 若省略远程分支名,则表示将本地分支推送到关联的远程分支上;若该远程分支不存在,则会被新建
$ git push origin dev //本地dev分支推送到远程origin的dev分支;若dev不存在,则会被新建
# 不管是否存在远程分支,都可以将本地分支推到远程主机
$ git push --all origin //本地分支都推送到origin主机

言尽及此。面向新手,本文主要讲述git的基本工作流程及基本指令,本人也是入门,如有错误,请批评指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值