Git的使用

一、Git是什么呢?

Git是目前世界上最先进的分布式版本控制系统。那什么是版本控制系统?简单的点就是控制每次修改、提交后所有版本的集合。在这个版本控制系统中,你可以找到所有已经修改过后的内容。

二、Git与SVN的区别

SVN是集中式版本控制系统,版本库是集中放在服务器的,每次工作的时候,首先要从服务器上拿到最新代码,然后工作,写代码,工作完成后,还要继续推送到服务器上。这种集中式版本控制系统是必须联网才能工作,工作局限性就比较大,用着不是很方便。

Git是分布式版本控制系统,本地就是版本仓库,可以不用依赖网络,功能相当强大。

三、创建版本库

1、什么是版本库?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

所以,创建一个版本库非常简单,创建一个空目录:

图1

这时候桌面上就有一个test文件夹了。或者直接在桌面上创建一个空的文件夹,然后cd到该文件目录下。

2、把该目录创建成版本管理仓库:使用命令 git init

图2

这样该目录就是版本管理仓库了,以后工作内容都会提交到这个里面来。这个目录是Git来跟踪管理版本的,没事千万不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了

3、把文件提交到仓库里

首先在该文件下面创建一个read.txt文件:内容为:helloworld

第一步:使用命令行 git add . 把内容添加到暂存区里

第二步:用命令 git commit,把文件提交到仓库。

现在我们已经提交了一个read.txt文件了,我们下面可以通过命令git status来查看是否还有文件未提交,如下:

图3

上面说明已经提交到仓库了,没有需要提交的内容。接着 我们修改下read里面的内容:添加helloworld2 然后在查看状态如下:

图4

可以发现,read已经被修改了,但是还没有提交到仓库里。那怎么办呢?还是使用git add.和git commit -m ""命令提交。那每次都用这两个命令是不是有点麻烦呢?有没有简单点的呢?答案是git这么强大,那必须有的。把这两个命令合成一个命令:git commit -a -m "" 就可以了。还有就是要养成一个习惯:当你提交完成后,在执行下git status这个命令,查看下当前状态,以确保所有修改的内容都已经提交完成了。

四、添加远程库(先有本地仓库,后有远程仓库)

公司里的项目代码一般都是放在远程仓库,以便多人开发,多人使用。同时还可以备份项目代码。那怎么创建远程仓库呢?首先,登陆GitHub,然后,在右上角找到“Create a new repo”按钮,创建一个新的仓库,然后 在Repository name填入test,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库。

目前远程仓库已经创建好了,不过还是空的。那怎么将远程仓库和本地仓库关联起来呢,使用下面命令:

图5

记得把地址换成自己公司。添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

下一步:可以把本地库的所有内容推送到远程库上:使用命令git push -u origin master

图6

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。以后在推送时 就可以用git push origin master或者git push了。

五、从远程仓库克隆

一般进去公司后,项目就可以在远程仓库已经有了,你需要做的就是从远程仓库把代码给克隆下,然后自己在做相应的工作。那如何从远程仓库克隆呢?用命令git clone克隆一个本地库如下:

图6

其实你会发现:git还支持另一种方式:SSH。这里使用的HTTPS,当然你也可以用SSH,这个需要自己去生成一个后,添加进去就可以了。

六、版本回退

1、工作中难免会有出错的地方,而有时候需要回归到上一个版本或者之前的某一个版本。这是就需要版本回退功能了。但又有一个问题:可能之前有好多版本,而你也不知道到底是哪一个版本,这是就要用命令 git log 把所有提交的记录打印下,我们就可以通过log来确认自己需要回退的版本。如下:

图7

git log命令显示从最近到最远的显示日志,如果嫌上面显示的信息太多的话,我们可以使用命令 git log –pretty=oneline

2、现在我想使用版本回退操作,我想把当前的版本回退到上一个版本,要使用什么命令呢?git reset --hard id 如下:

图8

git reset --hard id中的id是commit id,git 就是通过这个id来找回对应的版本,而这个id是怎么获取的呢?通过git log命令,如第一步,就可以找到了。注:cat命令用来查看文件内容

3、回到未来。现在,你回退到了某个版本,然后想恢复到新版本怎么办?找不到新版本的commit id怎么办?Git提供了一个命令git reflog用来记录你的每一次命令:

图9

这样就可以回到最新版本了。

4、撤销修改

比如我现在在read.txt文件里面增加一行 内容为12333,在我未提交之前,我发现添加12333内容有误,所以我得马上恢复以前的版本,现在我可以有如下几种方法可以做修改:

第一:如果我知道要删掉那些内容的话,直接手动更改去掉那些需要的文件,然后add添加到暂存区,最后commit掉。

第二:我可以按以前的方法直接恢复到上一个版本。使用 git reset  –hard HEAD^

但是现在我不想使用上面的2种方法,我想直接想使用撤销命令该如何操作呢?可以使用git checkout  — file 可以丢弃工作区的修改。

命令 git checkout –read.txt 意思就是,把read.txt文件在工作区做的修改全部撤销,这里有2种情况,如下:read.txt自动修改后,还没有放到暂存区,使用 撤销修改就回到和版本库一模一样的状态。另外一种是read.txt已经放入暂存区了,接着又作了修改,撤销修改就回到添加暂存区后的状态。(注:git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令)

5、删除修改

现在我们在test文件下添加b.txt文件,如下:

图10

可以发现,现在test目录下面有两个文件:b.txt和read.txt.(注:lb命令查看当前目录的内容)

现在我们想删除b.txt文件,怎么办呢?把文件管理器中把没用的文件删了,或者用rm命令删了:

图11

然后用ls命令查看,发现只剩下read.txt文件了。当然,如果我想彻底从版本库中删掉了此文件的话,可以再执行commit命令 提交就可以的。

七、分支管理

1.创建与合并

首先创建一个dev分支,并且切换到dev分支上

图12

git checkout 命令加上 –b参数表示创建并切换,相当于如下2条命令

git branch dev

git checkout dev

git branch查看分支,会列出所有的分支,当前分支前面会添加一个星号。

现在我们在dev上面开发了。我在read.txt添加一句话:这个是dev分支添加的Helloworld 如下:

图13

dev工作已经做完了,现在切换到master分支上面,使用命令:git checkout master 然后使用cat read.txt命令查看内容,发现master分支没有刚刚添加的内容。说明我们刚刚是在dev上面开发的,还没有把内容合并到主分支上。

合并分支:使用命令git merge dev 在master主分支来合并dev分支如下:

图14

git merge命令用于合并指定分支到当前分支上,合并后,再查看read.txt内容,可以看到,和dev分支最新提交的是完全一样的。

注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。

合并完成后,留着dev分支也没有用途了,我们可以接着删除dev分支了,操作如下:

图15

总结创建与合并分支命令如下:

查看分支:git branch

创建分支:git branch name

切换分支:git checkout name

创建+切换分支:git checkout –b name

合并某分支到当前分支:git merge name

删除分支:git branch –d name

2、解决冲突

Git用<<<<<<<,=======,>>>>>>>标记出 不同分支的内容,通过标记来找到冲突,然后解决,在提交就可以了。

3、分支管理策略。

通常合并分支时,git一般使用”Fast forward”模式,在这种模式下,删除分支后,会丢掉分支信息,现在我们来使用带参数 –no-ff来禁用”Fast forward”模式。首先我们来做demo演示下:

1)、创建一个dev分支。

2)、修改readme.txt内容。

3)、添加到暂存区。

4)、切换回主分支(master)。

5)、合并dev分支,使用命令 git merge –no-ff  -m “注释” dev

6)、查看历史记录

分支策略:首先master主分支应该是非常稳定的,也就是用来发布新版本,一般情况下不允许在上面干活,干活一般情况下在新建的dev分支上干活,干完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。

4、多人协作:多人协作时,大家都会往master分支上推送各自的修改

1)、推送分支:

        就是把该分支上所有本地提交到远程库中,推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:使用命令:git push origin master,如果我们现在要推送到其他分支,比如dev分支上,我们还是那个命令 git push origin dev

那么一般情况下,那些分支要推送呢?

master分支是主分支,因此要时刻与远程同步。

一些修复bug分支不需要推送到远程去,可以先合并到主分支上,然后把主分支master推送到远程去。

2)、拉取分支:

有这么一种情况:假如我把本地dev分支推送到远程服务器上,之后另一位同事,拉取代码后,也需要在dev分支上开发,而他的本地没有dev分支,怎么办呢?很简单,使用命令:git checkout  –b dev origin/dev, 现在小伙伴们就可以在dev分支上做开发了,开发完成后把dev分支推送到远程库时。

另一种情况:我已经在我的本地dev分支开发了,然而并没有和远程的dev分支关联,这是同样是push不了的。怎么办呢?使用命令:git branch --set-upstream dev origin/dev,将本地dev和远程dev关联起来就可以了

这样git pull成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中的 解决冲突完全一样。解决后,提交,再push:

多人协作工作模式一般是这样的:

首先,可以试图用git push origin branch-name推送自己的修改.

如果推送失败,则因为远程分支比你的本地更新早,需要先用git pull试图合并。

如果合并有冲突,则需要解决冲突,并在本地提交。再用git push origin branch-name推送。

如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。


Git常用命令

mkdir:        XX (创建一个空目录 XX指目录名)

pwd:          显示当前目录的路径。

git init          把当前的目录变成可以管理的git仓库,生成隐藏.git文件。

git add XX      把xx文件添加到暂存区去。

git commit –m “XX”  提交文件 –m 后面的是注释。

git status        查看仓库状态

git diff  XX      查看XX文件修改了那些内容

git log          查看历史记录

git reset  –hard HEAD^ 或者 git reset  –hard HEAD~ 回退到上一个版本

(如果想回退到100个版本,使用git reset –hard HEAD~100 )

cat XX        查看XX文件内容

git reflog      查看历史记录的版本号id

git checkout — XX  把XX文件在工作区的修改全部撤销。

git rm XX          删除XX文件

git remote add origin 关联一个远程库

git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库

git clone  从远程库中克隆

git checkout –b dev  创建dev分支 并切换到dev分支上

git branch  查看当前所有的分支

git checkout master 切换回master分支

git merge dev    在当前的分支上合并dev分支

git branch –d dev 删除dev分支

git branch name  创建分支

git stash 把当前的工作隐藏起来 等以后恢复现场后继续工作

git stash list 查看所有被隐藏的文件列表

git stash apply 恢复被隐藏的文件,但是内容不删除

git stash drop 删除文件

git stash pop 恢复文件的同时 也删除文件

git remote 查看远程库的信息

git remote –v 查看远程库的详细信息

git push origin master  Git会把master分支推送到远程库对应的远程分支上

git tag <tagname>用于新建一个标签

git tag可以查看所有标签。

命令git push origin <tagname>可以推送一个本地标签;

git push origin --tags可以推送全部未推送过的本地标签;

git tag -d<tagname>可以删除一个本地标签;

git push origin :refs/tags/<tagname>可以删除一个远程标签。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 1.设置 初次使用需要设置姓名和邮箱git config --global user.name "git用户名"g...
    jrg陈咪咪sunny阅读 752评论 0 1
  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,645评论 4 54
  • Git和Github学习 1.创建版本库 安装git,至于这个话题就不细说了,按照你电脑的操作系统下载一个合适的g...
    郭子web阅读 366评论 0 0
  • 首先确定电脑安装了git 输入git 会产生提示: 如果没有安装,那么就网上搜索下载完成安装. 可以使用命令行安装...
    彗星来的那一夜阅读 837评论 0 0
  • 作词:田宇 作曲:上田知华 (music) 心如港湾夜的风, 弥漫着雾与灯虹。 紧攥着票根和归程, 远望向你的背影...
    南山青阅读 443评论 0 1