版本控制-git

一、概述

       在项目管理过程中,项目的代码管理是一个很重要的环节,CVS,SVN是早期我们常用的版本控制系统,这些集中式的版本控制系统随着互联网技术的日新月异已经不再满足开发者及项目管理者的需求,近几年分布式的版本控制系统git诞生并迅速成为应用最广泛的版本控制系统,作为一个开发者或者项目管理人员必须能够熟练掌握git进行协作开发及项目版本管理。网上有关git的介绍多不胜数,廖雪峰老师有关git的介绍相当详尽,可以在下面网站进行详细的学习,除此之外git官网有对git详尽的介绍。本篇文章主要总结git的常用个命令,以供后边开发时参考。

Git官网:https://git-scm.com 

廖雪峰网址:https://www.liaoxuefeng.com

二、安装

说明:有关git的安装git官网有各种环境的安装包及安装指导,可直接参考进行安装

1、windows环境安装git

git官网(https://git-scm.com/downloads)下载git的windows版本的安装包,然后安装即可。安装完成打开git bash,这是一个命令行式的git管理工具,打开之后输入git命令,如下图所示安装成功。

2、linux环境安装git

(1)所有系统皆可通过在git官网下载源码进行解压编译安装,下载地址如下所示:

  https://mirrors.edge.kernel.org/pub/software/scm/git/

  安装步骤示例:

$:tar -xzvf git-2.9.5.tar.gz   

$:cd git-2.9.5

$:./config

$:make

$:make install

(2)部分系统可以通过系统自带的安装命令进行安装,如下所示:

Debian/Ubuntu(新版本)
# apt-get install git

Debian/Ubuntu(旧版本)
# add-apt-repository ppa:git-core/ppa # apt update; apt install git

Fedora
# yum install git (up to Fedora 21)
# dnf install git (Fedora 22 and later)

Gentoo
# emerge --ask --verbose dev-vcs/git

Arch Linux
# pacman -S git

openSUSE
# zypper install git

Mageia
# urpmi git

Nix/NixOS
# nix-env -i git

FreeBSD
# pkg install git

Solaris 9/10/11 (OpenCSW)
# pkgutil -i git

Solaris 11 Express
# pkg install developer/versioning/git

OpenBSD
# pkg_add git

Alpine
$ apk add git

Slitaz
$ tazpkg get-install git

说明:以上未列举的均采用下载安装包编译安装的方式安装。

安装完成,在终端输入git命令,看是否能够打印git相关信息,如果可以则安装成功

3、mac环境安装git

请参考https://git-scm.com/download/mac网址提供的安装方式进行安装

三、git常用命令

1、git init:初始化一个仓库

示例:

如上如所示,我们在gittest目录下创建了一个Learngit空目录,然后通过git init命令将该目录初始化成一个git仓库(repository),我们发现该目录下多了一个.git目录。这样Learngit目录下的所有文件都可以被git管理起来了。

2、git status:查看工作区的当前状态

示例:

通过git status命令查看工作区状态发现仓库中有未添加的cosole和server两个文件夹。

3、git add filename1 filename2 … filenamen:将新的文件添加到git仓库

示例:

我们在Learngit仓库中创建如下创建console和server两个文件夹,然后在console和server文件夹中创建console_test1.properties,console_test2.properties文件和server_test1.properties,server_test2.properties文件。

使用git add命令将以上文件添加到Learngit仓库,仓库中新建的文件必须使用git add添加到仓库才可以进行管理

4、git commit –m “description”:将所有文件修改提交到仓库,git将产生一个提交记录。

git commit filename –m “description”:将单个文件或者选定的多个文件提交到仓库,如果是多个文件,filename之间应空格隔开即可。

 

注意:新的文件必须先add至仓库才能进行commit,如果仅仅是修改内容不需要重新add.

5、git log:显示最近到最远的提交日志

示例:

之前我们在Learngit仓库中共进行过两次commit操作,下面通过git log查看所有的提交记录。

git log --pretty=oneline:显示所有提交的commit id及提交的描述信息

 

第一列为commit id,是一个十六进制的串。第二列为提交时的描述信息。

6、git diff filename:使用git status发现文件被修改但没有提交时,可以通过该命令查看文件的具体修改内容。

示例:

 

我们修改server_test1.properties文件,然后通过git status查看仓库当前的情况,发现server_test1.properties文件被修改过,但是没有被提交,然后通过git diff命令查看该文件的具体修改情况如上图所示,接着提交该文件,再查看仓库状态。

7、git reset --hard commit_id:将当前版本跳转到commit_id所在的版本

在git中用HEAD表示当前版本,上一个版本是HEAD^,上上一个版本是HEAD^^,也可以写成HEAD~2。

示例:

通过上图我们发现一共有三次提交,当前版本server_test1.properties的内容如上图红框中所示。

上图中我们通过git reset –hard HEAD~2将版本回退到上上个版本,然后通过git log发现只剩下一次提交记录,查看server_test1.properties文件发现该文件的内容回退到了第一次提交时的状态。

8、git reflog:该命令可以查看之前与版本控制有关的命令使用历史

示例:

 

之前我们将版本回退到了第一个版本,若果要重新回到之前的第三个版本,需要知道该版本的commit_id才可以再次回到最新的版本。如上图所示,通过git reflog命令我们可以找到所有提交的commit_id。找到之前最新的版本的commit_id,然后git reset命令即可回到之前最新的版本。通过git log再次查看发现提交记录又变成了三次,查看server_test1.properties文件发现该文件的内容又变成之前第三次提交时的状态。

9、git工作区,暂存区,版本库

git工作区:在电脑中我们能够看到的目录就是工作区,比如我们前边建的Learngit目录就是该仓库的工作区。

git版本库:在工作区中有个隐藏的目录.git,这个就是该仓库的版本库。

git的版本库里存了很多东西,其中最重要的就是被称为stage的暂存区,还有git为我们创建的第一个分支master,以及指向master分支的一个指针HEAD。

 

下面我们在工作区创建LICENSE和readme.txt文件,然后将这两个文件add到暂存区

add之后如上图所示,接着将暂存区的修改提交到master分支。

总结:我们平常对文件的基本操作都是在工作区进行操作,通过git add命令将工作区的修改提交到暂存区,然后通过git commit命令将暂存区的东西提交到相应的分支。

注意:一个文件第一次修改后add,然后再进行第二次修改,然后进行commit之后提交的仅仅是第一次add之后的内容。因为第二次修改的没有add到暂存区。

10、git checkout -- file:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,使用该命令,如下图所示我们修改server_test1.properties文件然后还原。

11、git reset HEAD file:当你改乱了某个文件的信息,并且将修改add到了暂存区,使用该命令可以撤销提交到暂存区的修改,回到上一情形,再通过上一个命令丢弃工作区修改。如果将错误的文件commit到了版本库,则直接回退版本即可。

 

12、git rm file:删除版本库文件

    我们通过资源管理器或者rm file命令删除了工作区的某个文件时,此时工作区和版本库将变的不一致,如果确实要删除该文件时,使用git rm file,然后git commit file “description”将删除提交到版本库,则该文件彻底被删除。如果我们误删除了工作区的该文件,想要还原直接使用git checkout -- file即可。

13、Github介绍:

Github是git相关组织搭建的一个神奇的网站,这个网站就是提供git仓库托管服务的,所以只要注册一个账号就可以免费使用github的远程仓库了。

Github的网站地址为:https://github.com

14、创建远程仓库:

    在github上创建远程仓库如下所示

   

15、本地仓库如何和远程仓库创建联系:

本地仓库和远程仓库之间是通过ssh协议进行通信的,所以要设置ssh key,具体设置方式如下:

第1步:进入本地用户住文件夹查看是否有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key,创建命令如下所示:

$ ssh-keygen -t rsa -C [email protected]

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。当然你也可以设置自己的密码。如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:

然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

git clone 远程仓库地址

如:git clone [email protected]:jwang2012/Tools.git 将远程仓库克隆到本地

将本地仓库与远程仓库建立连接:

比如本地建立了一个叫Tools的仓库,远程也创建了一个叫Tools的仓库,当然仓库的名称也可以不一致,但是最好一致。要想将两个仓库建立连接,可以使用git remote命令

git remote add origin 远程仓库地址

如:git remote add origin [email protected]:jwang2012/Tools.git

origin是对远程的一个称呼,当然也可以是别的名称,如果通过clone克隆的仓库,默认远程的名称就是origin,通过该命令可以将多个远程仓库与本地建立连接。

git remote –v该命令可以查看当前本地仓库都与哪些远程仓库有连接

git push 远程名 分支名:eg:git push esdk develop

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

16、分支管理: 

(1)git branch :查看分支

(2)git branch name:创建分支

(3)git checkout name:切换分支

(4)git checkout –b name:创建并切换分支

(5)git branch –d name:删除某个分支

(6)git merge origin/master:将origin仓库的master分支与当前分支合并

 

17.git stash: 保存当前工作进度,会把暂存区和工作区的改动保存起来。执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。使用git stash save 'message...'可以添加一些注释.

    我们有时会遇到这样的情况,正在dev分支开发新功能,做到一半时有人过来反馈一个bug,让马上解决,但是新功能做到了一半你又不想提交,这时就可以使用git stash命令先把当前进度保存起来,然后切换到另一个分支去修改bug,修改完提交后,再切回dev分支,使用git stash pop来恢复之前的进度继续开发新功能。下面来看一下git stash命令的常见用法

git stash list:显示保存进度的列表。也就意味着,git stash命令可以多次执行。 git stash pop [–index] [stash_id]

git stash pop 恢复最新的进度到工作区。git默认会把工作区和暂存区的改动都恢复到工作区。

git stash pop --index 恢复最新的进度到工作区和暂存区。(尝试将原来暂存区的改动还恢复到暂存区)

git stash pop stash@{1}恢复指定的进度到工作区。stash_id是通过git stash list命令得到的  通过git stash pop命令恢复进度后,会删除当前进度。

18、git fetch:更新远程代码到本地

方法一:

git fetch origin master //从远程的origin仓库的master分支下载代码到本地的origin master

git log -p master.. origin/master  //比较本地的仓库和远程参考的区别

git merge origin/master  //把远程下载下来的代码合并到本地仓库,远程的和本地的合并

方法二:

git fetch origin master:temp    //从远程的origin仓库的master分支下载到本地并新建一个分支temp

git diff temp //比较master分支和temp分支的不同

git merge temp    //合并temp分支到master分支

git branch -d temp   //删除temp

19、git实际开发模式图谱:

说明:一般大型的开发中公司应该建立一个中心库,作为初始仓库及最终生产代码存放的地方。如果有一个全新的项目需要开发,首先在远程仓库中建立一个版本库,然后由项目管理者Fork一份到自己的远程仓库,然后再clone一份到自己的本地,搭建好项目结构之后再push到自己的远程,然后由自己的远程merge到远程中心仓库,再由其它开发者fork,clone到本地之后进行开发,最后将代码先提交到自己的远程,再像远程仓库发起merge请求,经审核后合入远程中心仓库作为项目出包的最终代码。

总结:

    本篇主要记录了git常用的命令。有关git详细的使用教程请参考:https://www.liaoxuefeng.com或者直接参考git官网给出的使用文档。有关git解决冲突,以及git服务器搭建在后边再详细总结。

猜你喜欢

转载自blog.csdn.net/m0_38045882/article/details/81213807
今日推荐