git:distributed is the new centralized-part1

PART 1


梗概

git文件流转有三个工作区域:工作目录(working directory)、暂存区域(staging area)、本地仓库(repository)。文件处于上述三个工作区域的状态分别为:已修改、已暂存、已提交。

基本的git工作流程:在working diretory修改文件—>对修改的文件进行快照,保存到staging area—>提交更新,永久存储到repository中。

从远程仓库克隆一个项目到本地当前目录:

$ git clone git://xxx.git

每次修改文件后如何提交到远程仓库

git status:显示当前分支目录、是否有未纳入管理的文件(比如新创建的文件)等。

git add xxx:将某个新文件纳入版本控制并放入暂存区;将修改的文件放入暂存区;

如果不想把某些文件纳入版本控制,可以创建一个.gitingore文件,并列出文件格式,如:

$ cat .gitignore
*.[oa]
*~

git diff:查看尚未暂存的文件更新了哪些部分;
git diff - -staged:查看已暂存的文件与上次提交时的差异;
git commit:提交更新(暂存区域到本地仓库)。
git commit -m “xxxxxx”:给上面的操作加注释。
git commit -a -m “xxxxxx”:把修改的文件直接提交到本地仓库,跳过暂存区域的步骤;

查看提交历史

git log:查看提交历史;
git log -p -2:仅显示最近的两次更新差异;

撤销操作

提交时忘了暂存某些修改,可以先补上暂存操作,再重新提交:

$ git commit -m ‘initial commit‘
$ git add forgotten_file
$ git commit —amend

使用git reset HEAD xxx取消已经暂存的文件;

远程仓库的使用

远程仓库是指托管在网络上的项目仓库,有些是只读的,有些是可写的。协作开发项目时,需要管理远程仓库,推、拉数据,分享进展。

管理远程仓库,包括添加远程库、移除废弃的远程库、管理远程库分支、定义是否跟踪分支等等;

git remote -v:查看当前的远程库,并显示对应的克隆地址。

git remote add haha git:xxxxxx.git:添加一个新的远程库,并制定一个简单的名字,以便将来引用。

git fetch haha:把上面的远程仓库抓取到本地(因为本地木有)。fetch只是拉取,并不合并。

git fetch origin:抓取从你上次克隆以来别人上传到此远程仓库的所有更新(克隆的仓库都是归于origin名下,即:你使用git clone下载下来的项目,在你本地的分支目录为origin/master)。

git push origin master:把本地master分支推送到远程origin仓库(看上例可知,本地和远程都有个origin/master)。执行成功的前提:所克隆的服务器有写权限且同一时刻没有其他人正在推数据。

git remote show origin:查看远程仓库(本例为origin)的信息。

什么是git分支?

假如我们提交三个文件,git会用blob对象存储每个文件的快照。而在提交的同时,会创建一个提交对象,该提交对象包含一个指向文件快照的指针、包含一个或者0个指向该提交对象的父对象的指针、包含一些其他附属信息。那么单个提交对象在仓库中的数据结构如图:

之后每做一次提交,都会有一个指向上一次提交对象的指针,连续提交三次之后如下图:

分支指向最新一个提交对象,git默认第一个分支为master,那么如下图:

新创建一个分支,就是新增加一个指向最新提交对象的指针:git branch testing

有一个特别指针HEAD,它在哪里就说明当前分支在哪里:

使用git checkout testing切换到新创建的分支:

其实就是HEAD指向新建分支了。

你在新建的分支上提交一个修改,则又新增一个提交对象,变成这样:

你再使用git checkout master切换到master分支,HEAD就又过去了:

如果你在master再作修改,再提交,其实很明显,提交内容是不包括你testing分支的新增内容的,因为它目前指向的是前一个提交对象:

所以,我们所有做的改变分别孤立在不同的分支里,我们可以在不同的分支里反复切换,并要在时机成熟时,将他们合并在一起。

更多内容,关注我的IT微信订阅号:



参考文档:https://git-scm.com/

时间: 2024-10-12 12:45:57

git:distributed is the new centralized-part1的相关文章

Git 版本管理工具(一)

Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介绍 Git  —— The stupid content tracker(傻瓜式的内容跟踪器) 1. Git 背景 Git 最初由Linus Torvalds编写,用于 Linux 内核开发的版本控制工具. Git 与常用的版本控制工具 CVS.Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便. Git 的速度很快,这对于诸如 Linux kerne

svn迁移至git

svn 版本库的迁移,只要svn 库为标准目录(trunk.branches.tags)按照git官方文档基本都可以完成. 这里说说我所迁移的非标准目录结构的svn 库 svn 库里有part1目录,part1目录下又分为:code.UI等等,对于这种非标准目录结构,主干就是part1,没有分支,没有标签. 而code下面又分为android.ios目录,目录内才分trunk.tags.branch,这种目录层级结构-- 对于以上非标准目录结构,我采用的是先git svn到本地,并提交到git仓

GIT版本管理工具

原文:http://blog.csdn.net/ithomer/article/details/7527877 Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介绍 Git  —— The stupid content tracker(傻瓜式的内容跟踪器) 1. Git 背景 Git 最初由Linus Torvalds编写,用于 Linux 内核开发的版本控制工具. Git 与常用的版本控制工具 CVS.Subversion 等不同,它采用了分布式版本库的方

Git——版本管理工具(一)

Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介绍 Git  —— The stupid content tracker(傻瓜式的内容跟踪器) 1. Git 背景 Git 最初由Linus Torvalds编写,用于 Linux 内核开发的版本控制工具. Git 与常用的版本控制工具 CVS.Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便. Git 的速度很快,这对于诸如 Linux kerne

Git学习(一) 版本管理工具

Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介绍 Git  -- The stupid content tracker(傻瓜式的内容跟踪器) 1. Git 背景 Git 最初由Linus Torvalds编写,用于 Linux 内核开发的版本控制工具. Git 与常用的版本控制工具 CVS.Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便. Git 的速度很快,这对于诸如 Linux kerne

版本控制工具比较-CVS,SVN,GIT

首先介绍几个版本控制软件相互比较的重要依据,更详细的比较请参考文中链接: * 版本库模型(Repository model):描述了多个源码版本库副本间的关系,有客户端/服务器和 分布式两种模式.在客户端/服务器模式下,每一用户通过客户端访问位于服务器的主版本库,每一客户机只需保存它所关注的文件副本,对当前工作副本 (working copy)的更改只有在提交到服务器之后,其它用户才能看到对应文件的修改.而在分布式模式下,这些源码版本库副本间是对等的实体,用户的机器出了保存他 们的工作副本外,还

3 kafka介绍

 本博文的主要内容有 .kafka的官网介绍 http://kafka.apache.org/ 来,用官网上的教程,快速入门. http://kafka.apache.org/documentation kafka的官网文档教程. The Producer API allows an application to publish a stream records to one or more Kafka topics. The Consumer API allows an application

七步从Angular.JS菜鸟到专家(1):如何开始

AngularJS 重新定义了前端应用的开发方式.面对HTML和JavaScript之间的界线,它非但不畏缩不前,反而正面出击,提出了有效的解决方案. 很多前端应用的开发框架,比如Backbone.EmberJS等,都要求开发者继承此框架特有的一些JavaScript对象.这种方式有其长 处,但它不必要地污染了开发者自己代码的对象空间,还要求开发者去了解内存里那些抽象对象.尽管如此我们还是接受了这种方式,因为网络最初的设计无法提供 我们今天所需的交互性,于是我们需要框架,来帮我们填补JavaSc

七步从Angular.JS菜鸟到专家(1):如何开始【转】

AngularJS 重新定义了前端应用的开发方式.面对HTML和JavaScript之间的界线,它非但不畏缩不前,反而正面出击,提出了有效的解决方案. 很多前端应用的开发框架,比如Backbone.EmberJS等,都要求开发者继承此框架特有的一些JavaScript对象.这种方式有其长 处,但它不必要地污染了开发者自己代码的对象空间,还要求开发者去了解内存里那些抽象对象.尽管如此我们还是接受了这种方式,因为网络最初的设计无法提供 我们今天所需的交互性,于是我们需要框架,来帮我们填补JavaSc