【开发工具 - Git】之Git使用案例
本帖主要介绍一下Git在实际项目开发中的使用流程,包括克隆、暂存、提交、推送、拉取、分支、冲突解决等,暂时还不包括回退。
1、首先需要安装Git,下一步下一步就行,这里就不说了。值得一提的是,如果Git安装成功,当你在某个文件夹下点击鼠标右键的时候,弹出的菜单中会有一项是Git Bash Here,点击这一项就可以弹出Git的控制台,我们对Git的所有操作都会在这个控制台中进行:
2、然后我们需要在GitHub或OSChina上创建一个项目,这里我是在OSChina的码云上创建了一个项目,命名为TestGit:
这里需要强调的是,如果我们让我们的本地仓库连接远程仓库,就必须有一个SSH KEY。我们可以去电脑当前用户文件夹中查看有没有一个 .ssh 的文件夹,如果没有则需要生成一个SSH KEY,方法如下:
(1)在Git控制台中输入 ssh-keygen -t rsa -C "xxx@xx.com",引号里面的是你的邮箱地址,回车后就创建了一个SSH KEY,此时你就可以在你的当前用户文件夹中看到多了一个 .ssh 文件夹。这个文件夹中有两个文件:id_rsa(私钥) 和id_rsa.pub(公钥),我们需要的是 id_rsa.pub 公钥文件。
(2)得到公钥文件之后,打开GitHub或OSChina中的Settings选项,其中有一项是SSH KEY,我们需要在这里创建我们的SSH KEY,标题任意,公钥中填入id_rsa.pub文件中的内容,点击确定即可。
3、在电脑中新建一个文件夹用来放本地仓库,这里我用的是我电脑中的 E:\GitWorkSpace 文件夹。
4、在 E:\GitWorkSpace 文件夹下空白区域右键点击 Git Bash Here 打开 Git 控制台,接下来我们就需要将远程仓库中的项目克隆到本地电脑中了。
5、为了克隆一个项目,我们需要它在远程仓库中的SSH地址,即下图所示区域,选中SSH,点击最右边的 复制 按钮即可复制其SSH地址
6、在控制台中输入 git clone git@git.oschina.net:itgungnir/TestGit.git ,点击回车开始克隆仓库,克隆成功后如图所示:
此时我们到 E:\GitWorkSpace 目录中,就可以看到一个TestGit的文件夹了,打开TestGit,我们可以看到一个隐藏的 .git 文件夹和一个readme文件。
7、进入TestGit项目:在控制台中输入 cd TestGit即可,此时进入的是master分支,即主分支,如图:
8、在克隆仓库的时候,默认就创建了一个名为 origin 的远程连接,我们可以通过 git remote -v来查看:
9、在远程仓库中创建一个 dev 分支:
(1)点击下图所示的区域,点击 管理分支
(2)可以看到,现在项目中只有 master 这一个分支,点击左侧的 新建分支 按钮新建一个分支
(3)在 新分支名称 中输入dev,点击创建分支
(4)创建完成后,就可以看到,多了一个 dev 分支
10、我们需要将远程仓库中的 dev 分支拉取到本地仓库中:
(1)由于远程仓库的分支进行了更改,因此我们需要先更新远程连接:在控制台中依次输入git remote show origin、 git remote update 、git fetch语句,如下图:
可以看到,在执行了 git remote update 语句之后,提示我们有一个dev分支没有更新,使用 git fetch 语句进行更新。
(2)更新完成之后,将远程仓库中的dev分支复制到本地:使用 git checkout -b dev origin/dev,如图:
这条语句的作用是将 origin 中的 dev 分支复制到本地,本地的分支也叫 dev。
11、在团队协作的时候,远程仓库中只有 master 和 dev 两个分支就可以了,也就是说,我们在本地需要建立新的分支编写自己的模块,写完之后合并到 dev 分支,然后推送到远程仓库中即可。
12、在本地创建自己的分支:使用 git checkout -b wzy语句创建一个名为 wzy 的本地分支:
13、在本地 wzy 分支中进行代码的编写。例如:我们在TestGit项目下新建一个 a.java 文件,在 a.java 文件中写入一些代码,然后提交到本地仓库中
(1)在TestGit中新建一个 a.java 文件:
(2)在Git控制台中使用 git status命令查看当前项目中文件的修改状态(哪个文件被改变了):
可以看到,a.java 被改变了,而且显示为红色,意思是还没有进行暂存(暂存之后会变成绿色)
(3)对 a.java 进行暂存,使用 git add a.java命令:
如果没有提示任何信息,则表示暂存成功了。
(4)将暂存信息提交到本地仓库,使用 git commit -m "add a.java"命令:
提交成功后,会提示 1 file changed ,表示一个文件被修改后提交了。
(5)此时我们再次调用 git status命令查看状态,就可以看到没有任何文件被修改的提示:
14、以上所有的文件操作都是在 wzy 分支上进行的,现在我们想将 wzy 分支合并到 dev 分支上
(1)注意,merge 命令表示的是将参数(wzy)分支合并到当前分支,因此我们需要先切换到 dev 分支中,使用git checkout dev命令:
(2)如果直接用 merge 命令,会直接将 wzy 分支删除,这个叫做 Fast Feature,我们还想在合并之后查看 wzy 分支的信息,就需要停止 Fast Feature 功能,因此需要添加 --no-ff 。停止 Fast Feature 功能之后,会在分支合并点上创建一个新的 commit ,因此我们还需要添加一个提交说明(-m)。综合以上,该命令是:git merge --no-ff -m "merge wzy" wzy ,如下图:
(3)合并成功之后,wzy 分支就没用了,我们可以使用 git branch -d wzy命令来删除这个分支,删除后重新使用git branch 命令来查看所有分支,发现 wzy 分支已经被删除:
15、接下来就是推送到远程仓库了。如果我们现在推送,是肯定成功的,因为现在只有我们自己在操作 dev 分支,但我想给大家演示一下冲突的解决,所以,我们需要去远程仓库进行一些修改。
打开远程仓库中的 TestGit 项目,切换到 dev 分支,然后创建一个 a.java 文件并写入一些数据,点击 提交 按钮提交到 dev 分支,回到 dev 分支后发现多了一个 a.java 文件:
16、回到控制台,尝试进行推送:
(1)使用 git push origin dev命令将改变推送到远程仓库的 dev 分支中,会发现报错,原因是其他人在你将远程仓库克隆到本地之后的这段时间内对远程仓库dev 分支中的项目进行了更改,即我们本地仓库中的项目不是最新版本的项目,需要从远程仓库拉取最新版本
(2)调用 git pull命令从远程仓库中拉取项目的最新版本,发现仍然报错,原因是文件冲突,冲突文件是 a.java
(3)当遇到冲突的时候,我们有两种解决方案:第一是在文件系统中打开这个文件进行修改;第二是直接在Git控制台中进行更改。调用 vi a.java命令对 a.java文件进行修改,会看到跳转到了这样一个界面:
在这个界面中,按 D可以删除一行,按 A可以开启编辑,按 ESC可以退出当前状态,输入 :wq可以保存并退出这个页面。使用这些操作对文件进行修改,修改成我们想要的样子,然后保存退出即可。
另外我们可以看到,两个版本的文件中冲突的内容被 <<<<<<< 和 >>>>>>> 两种符号括了起来,两个版本的内容被 ======= 符号分隔开了,我们只需要在这个区域内修改,然后删掉这三种符号即可。
修改完成之后的样子如图所示:
按 ESC退出编辑状态,输入 :wq命令保存当前文件状态并退出,就回到了控制台页面:
17、冲突解决完成之后需要再次暂存、提交之后才能再次推送:
(1)查看当前状态,发现 a.java 文件没有被暂存提交:
(2)对 a.java 文件进行暂存和提交,然后再次查看状态,发现没有需要提交的了:
18、现在就可以再次推送了:
回到远程仓库中查看,可以看到 a.java 文件的提交事件变为了 conflict fixed ,而且文件内容也被改变了:
以上是一个操作 Git 进行版本控制的小DEMO,因为我是初学者,所以肯定会有些地方理解的不正确,希望大家提出宝贵的意见,让我可以学习进步,谢谢大家!
【开发工具 - Git】之Git使用案例的更多相关文章
- 开发工具--浅谈Git
工具|浅谈Git Git这个工具,是我一直想写文章,终于我实现了我的想法.在我开始写之前,发表一下自己的看法,git只是一个工具,既然已经认定是一个工具,那么一定具备工具这类的共同特征,请用面向对象的 ...
- 使用intellij的idea集成开发工具中的git插件(转)
转自:https://blog.csdn.net/u012225679/article/details/71123171 注意:这里并没有介绍git客户端的安装,如果要安装客户端,大家可以参考如下的链 ...
- 开发工具篇:Git和Github
开发工具篇:Git和Github Git是什么? Git是目前世界上最先进的分布式版本控制系统.工作原理 / 流程: Workspace:工作区 Index / Stage:暂存区 Repositor ...
- 【IDEA】使用intellij的idea集成开发工具中的git插件
注意:这里并没有介绍git客户端的安装,如果要安装客户端,大家可以参考如下的链接: http://www.runoob.com/git/git-install-setup.html 1.在使用这个id ...
- Android开发工具: AS, Gradle, Git等
(一)史上最详细的Android Studio系列教程 你还没有使用Android Studio + Gradle么?那就有点太落伍了,下面自己原创总结了Android Studio的一系列教程,图文 ...
- iOS:使用Github托管自己本地的项目代码方式一:(Xcode方式:开发工具Xcode配置Git,由Xcode-->Source Control-->Commit)
管理代码的地方主要有:Github(国外流行).CocoaChina.Cocoa4App.中国开源社区.CSDN.博客园.简书等等..... 现在主要介绍如何使用Github托管自己的项目代码. 尊重 ...
- UnityVR Steam_VR开发工具插件---VRTK 自带案例分析
- 用JetBrains PyCharm 开发工具写一个简单python案例
import urllib.request import re #解析html的内容 def getHtml(url): page=urllib.request.urlopen(url) html=p ...
- 如何使用IDEA开发工具中右键中的Git图形化工具
首先,你的项目一定是git服务器上面down下来的,下面来演示如何使用IntelliJ IDEA 开发中在鼠标右键中提供的一个非常方便的图形化Git管理工具: 这里使用的IDEA开发工具的版本是 In ...
随机推荐
- Maven仓库详解
转载自:Maven入门指南④:仓库 1 . 仓库简介 没有 Maven 时,项目用到的 .jar 文件通常需要拷贝到 /lib 目录,项目多了,拷贝的文件副本就多了,占用磁盘空间,且难于管理.Ma ...
- sort()排序
var ary = [8,9,10,3], compare = function(a,b){ return b.age-a.age; }, g = [ { name:"jim", ...
- [转载]MongoDB学习(三):MongoDB Shell的使用
MongoDB shell MongoDB自带简洁但功能强大的JavaScript shell.JavaScript shell键入一个变量会将变量的值转换为字符串打印到控制台上. 下面介绍基本的操作 ...
- mysql中实现行号,oracle中的rowid
mysql中实现行号需要用到MYSQL的变量,因为MySql木有rownumber. MYSQL中变量定义可以用 set @var=0 或 set @var:=0 可以用=或:=都可以,但是如果变量用 ...
- UVA 12647 Balloon
这是一个线段树的题目: 我记得一个月前在cf上也做过一个类似的题目: #include<cstdio> #include<cstring> #include<algori ...
- asp.net(c#)有关 Session 操作的几个误区
1. this.Session["username"] = null HttpSessionState 内部使 用 NameObjectCollection 类型的集合对象来存储 ...
- shell脚本ssh自动登陆服务器
#!/bin/shsshpass -p "your password" ssh user@ip 注意: 需要先安装sshpass: 源码下载地址:http://sourceforg ...
- 读写UTF-8、Unicode文件(加上了文件头,貌似挺好用)
conf配置文件一些为UTF-8和Unicode格式,这样便可良好的支持多语言,从网上查阅资料后,将读写UTF-8.Unicode文件写了几个最精简的函数,更新后加了是否写文件头的功能,以适应更多需要 ...
- 如何才能学到Qt的精髓——信号槽之间的无关性,提供了绝佳的对象间通讯方式,QT的GUI全是自己的一套,并且完全开源,提供了一个绝好机会窥视gui具体实现
姚冬,中老年程序员 叶韵.KY Xu.赵奋强 等人赞同 被邀请了很久了,一直在思考,今天终于下决心开始写回答. 这个问题的确是够大的,Qt的代码规模在整个开源世界里也是名列前茅的,这么大的项目其中的精 ...
- get started with laravel
Browsing the API (http://laravel.com/api) can be somewhat intimidating at first.But it is often the ...