Git学习教程(三):Git工作流程-阿里云开发者社区

开发者社区> 余二五> 正文

Git学习教程(三):Git工作流程

简介:
+关注继续查看
第三课   Git 工作流程
    与远程仓库同步,修改,载入(stage)和提交项目
 

现在你已经有一个git本地仓库,一切都配置完毕。然后该怎么办?
一般来说,跟其他的源码控制系统的工作流程没什么两样,唯一一个区别就是载入(stage)的过程。整个工作流程大致是这样(流程1):
与远程仓库同步
修改文件
查看变更
载入变更
提交载入的变更
重复
上传

这是最复杂的情况,如果你不与别人合作开发的话,就不需要上传到仓库中去(流程2):
* 修改文件
* 提交变更
* 重复
简单吧。要记得,git是分布式的,所以如果不是合作项目的话,实际上不需要提交到一个公共的共享服务器上--你可以像使用RCS一样,只用来追踪本地文件变更。下面,让我们先来看个简单的示例,紧接着再来看用git协作开发的实例。
简单示例
如果你想跟着做这个例子,请克隆这个项目:
$ git clone git://github.com/schacon/simplegit
 

例子开始,按照流程2,我们首先要修改README文件,将自己添加到项目作者中去。所以我们修改这个文件。然后我们希望提交这个变更,所以我们运行'git commit -a' 命令。 -a 的意思是告诉git先将变更了的文件先载入(stage),然后提交-我们后面会通过'staging area'命令实现,但是现在运行 'git commit -a' 命令,效果跟在SVN中使用'commit'命令一样。
$ git commit -a
执行完之后,一个提交信息的提示会出现在编辑器中(这里$EDITOR环境变量或'core.editor'这两个git配置变量的默认值都是vim)类似下面这样的内容:
_
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch main
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# modified:   README
#                                                                      
~                                                                                      
~                                                                                      
".git/COMMIT_EDITMSG" 9L, 253C
输入一些提交的信息,譬如"added myself to the README as an author"然后退出。
vim操作提示:
按下I,o,a进入编辑模式,编辑完毕按Esc,输入:wq保存退出。
然后会看到这样的提示:

[master]: created 5896d4d: "added myself to the README as an author"
 1 files changed, 2 insertions(+), 1 deletions(-)
 
显示我们刚刚输入的提交信息,并且有一组关于这次提交项目中文件变更的统计数字。同时还给我们一个提交的校验和,'5896d4d',这个校验和可以用来日后确切的查看这次提交的细节。
这就是简单用例。修改文件,'git commit -a',重复
协作开发示例
现在,我们来介绍一个复杂点的实例,这次我们使用远程仓库,将项目上传上去,从而跟其他的开发者一起协同工作。同时,我们会介绍staging area。
如果你会从远程仓库中克隆项目,那么与远程仓库项目同步也是相当简单的--只需要执行'git pull'.如果是远程仓库项目没有变化,也就是说其他的开发者没有对项目进行变更,会显示这样的信息:
Already up-to-date.
相反,执行这条命令之后会将你上次同步之后远程仓库中的变更同步到本地项目中,并且git会合并这些新的变更:
$ git pull
Updating c264051..b04dc3d
Fast forward
 lib/simplegit.rb |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)
例子开始,重新克隆远程仓库中的项目,修改README文件和lib/simplegit.rb文件(不要执行git commit -a)。现在你可以使用'git status'命令来查看工作目录发生了什么变更:
$ git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
modified:   README
modified:   lib/simplegit.rb
#
no changes added to commit (use "git add" and/or "git commit -a")
我们看到,有两个文件是在"changed but not updated"段落中出现 ,这意味着这两个文件还没有载入(unstaged). 如果现在我们提交,什么也不会发生。也就是说文件必须先载入(stage),然后才能提交。
所以,我们先来载入(stage) 文件,git中使用'git add'命令不仅可以开始追逐文件而且可以对他们载入stage变更。所以让我们载入(stage) README文件的变更,然后再来查看一下状态。
$ git add README
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# modified:   README
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
modified:   lib/simplegit.rb
现在'lib/simplegit.rb'文件还是未载入(unstaged), 但是README文件现在已经到了'changes to be committed'段落中-它几经载入(stage)了。现在如果我们运行提交命令(不要-a,这个会自动stage所有的东西),只有这个文件会被提交-而simplegit.rb依然是unstaged。这时,我们使用-m选项来执行'git commit',这样后面跟上字符串表示这次提交的信息。
$ git commit -m 'updated the README'
[master]: created 14bb3c6: "updated the README"
 1 files changed, 1 insertions(+), 2 deletions(-)
如果现在再执行'git status',我们会看到stage之后的文件现在已经提交了,只剩下了unstaged的'simplegit.rb'文件。
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
modified:   lib/simplegit.rb
#

现在我们可以stage并且提交这个文件:
$ git commit -a -m 'added a staging command to the library'
[master]: created bbaee85: "added a staging command to the library"
 1 files changed, 4 insertions(+), 0 deletions(-)
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
nothing to commit (working directory clean)
现在我们已经将两次提交的变更都搞定了,而且加了提交信息,可以让我们的合作伙伴很容易理解我们做的变更。经过最后一次提交,我们看到'git status'执行之后显示我们的工作目录clean了(同时提示我们现在的分枝上有两个提交还没有上传)
所以,现在我们将这些变更上传到服务器端与我们的合作伙伴分享,前提是我们有上传的权限,(如果没有上传的权限,我们可以在网络上创建一个自己的git仓库,将其上传),然后让朋友下载。
运行'git push'会将我们的变更上传到服务器。
$ git push
Counting objects: 11, done.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (7/7), 744 bytes, done.
Total 7 (delta 3), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
   b04dc3d..bbaee85  master -> master

到目前为止,我们看到了新数据都已经上传完毕,服务器上的主分支也已经更新了。现在我们可以复习一下这整个的过程,让我们可以更加熟练的将git应用到我们的项目中去。
 
 
 




本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/244826,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
场景化学习 git
Linux 之父的第二件作品—— git 自从诞生后就改变了软件生产和协作的面貌,gitlab、github、bitbucket、 gitbook、gerrit 等项目的出现都极大地丰富了现代化软件工程实践。业界介绍 git 各种用法的书已经是汗牛充栋,本文的特色在于通过问答化场景来串联 git 实践中的常用功能及背后原理。 如果你期望让自己的 git 学习之旅更加有趣、记忆深刻,可以通过克
4598 0
yum管理包流程_学习笔记
时间:2017.12.03作者:李强参考:man,info,magedu讲义,万能的internet声明:以下英文纯属个人翻译,英文B级,欢迎纠正,以下内容纯属个人理解,并没有对错,只是参考,盗版不纠,才能有限,希望不误人子弟为好。
622 0
每日学习与工作计划移至日事清APP
今天今天开始,每日学习与工作计划移至日事清APP。 博客园依然是我写文字的主战场。日事清APP仅限于做计划。
738 0
艾伟也谈项目管理,让亲身实践者执行工作流程
  文 / 黄易山   在这里,我使用“工作流程”这个词来描述“个人或团体为了完成一项活动而遵循的步骤”意义上的流程,以及组织的一般制度。随着一家公司的成长,有必要增加或整理工作流程。   最重要的利弊权衡通常是工作流程所带来的阻力,以及效率或效益上的收益孰轻孰重。
1004 0
+关注
20382
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载