Git教程

Posted dasha50

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git教程相关的知识,希望对你有一定的参考价值。

技术图片

 1.简介

Git是目前世界上最先进的分布式版本控制系统,在各大公司进行开发避免不了使用Git进行代码的管理与协同开发。公司开发软件大多使用敏捷开发,产品迭代速度快,而Git出色的版本控制能力为这一需求做了优秀的补充。这里介绍一下在公司用到的git命令,并作简要介绍,内容持续更新!

2.安装

博主是在linux进行开发,但是是在windows上进行git操作,将各仓库代码pull到本地,或者将本地的代码push到远程。

linux

1,在终端敲击git,查看是否已经安装了git。

2,如果发行版本是Debian或Ubuntu Linux,通过一条sudo apt-get install git就可以直接完成Git的安装,非常简单。

3,其他Linux版本,先从Git官网下载源码(https://git-scm.com/downloads),然后解压,依次输入:./configmakesudo make install这几个命令安装。

Windows

1,从Git官网下载安装程序,按照默认选项进行安装。

2,安装完成后在开始菜单栏,点击Git->Git Bash,会弹出窗口说明安装成功。

3,,安装完成后,进行设置,在窗口输入:

$ git config --global user.name "Your Name"

$git config --global user.email "email@example.com"

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

3.添加文件并提交

3.1创建版本库

版本库又名仓库(repository),可以理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。在窗口Git Bash窗口操作。

1,创建文件夹,并进入

$ mkdir learngit

$ cd learngit

2,敲入$git init命令,把这个目录变成Git可以管理的仓库。成功后当前目录下多了一个.git的目录,这是Git的版本库(隐藏文件夹),这个目录是Git来跟踪管理版本库的。

3,learngit目录下新建文件readme.txt:

Git is a version control system.

Git is free software.

4,把文件放到git仓库有两步:

1)git add readme.txt。将文件添加到暂存区。

2)git commit -m "wrote a readme file!"。将暂存区的内容提交到当前分支。暂存区中可能有很多个文件,这里是一次性提交所有添加到暂存区的文件。

-m 后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

3.2 工作区和暂存区

工作区是我们操作的目录,比如learngit。learngit下有个隐藏.git目录,这是Git版本库。

Git的版本库里有称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

技术图片

前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:1,git add;2,git commit。

git add xxx 可以执行多次,将多个改动的文件添加到暂存区,然后使用git commit命令将暂存区内容添加到当前分支(master分支为系统自动创建)。

比如我们修改readme.txt,然后再添加一个LICENSE文件,敲击:$git add readme.txt, $git add LINCENSE。添加完之后使用git status命令查看状态。

现在暂存区变成:

技术图片

然后执行:$ git commit -m "understand how stage works"。暂存区变成了:

技术图片

3.3 版本回退

 $git log

如果git commit提交多次,而我们记不清楚哪次是什么改动,使用$git log命令查看之前的提交:

$ git log

commit e475afc93c209a690c39c13a46716e8fa000c366

Author: Michael Liao <askxuefeng@gmail.com>

Date: Fri May 18 21:00:00 2019 +0800

revise a readme file

 

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0

Author: Michael Liao <askxuefeng@gmail.com>

Date: Fri May 18 20:00:00 2019 +0800

wrote a readme file

$git reset

如果想将readme.txt回退到wrote a readme file版本,怎么做呢?在Git中,用HEAD表示当前版本,也就是最新的提交e475a...,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。要把当前版本回退,可以使用:

$ git reset --hard HEAD^

再使用$git log命令查看revise a readme file版本已经消失,但是又想回到revise版本怎么办,如果窗口没有关闭,找到revise版本的commit id:e475a...,敲击命令:

$ git reset --hard e475a

Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向wrote版本,然后顺便把工作区的文件更新了。

如果窗口关闭,而又想回退到之前的版本,敲击:

$ git reflog

 可以查看到之前操作的细节。

3.4 撤销修改

$git checkout -- file

如果不慎在readme.txt中添加了内容,如stupid boss,但是后悔了,你可以:1,手动删除改行。2,git checkout --readme.txt(注意是--)。

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commitgit add时的状态。

$git reset HEAD file

如果不慎把修改git add添加到了暂存区,而还没有commit,可以使用:$git reset HEAD readme.txt。

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

然后丢弃工作区内容的修改:$git checkout -- readme.txt。

3.5 删除文件

$ git rm readme.txt

如果你在文件管理器中直接删除了readme.txt,如rm readme.txt。你又想在仓库分支里把这个文件也删除,

首先,$git rm readme.txt。然后,$git commit -m "rm readme.txt"。即从分支中删除了文件。

如果误删错了,使用:$git checkout -- readme.txt。即可恢复。

4. 分支管理

远程仓库的创建可自行google,也看参见文末传送门。

每次commit,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向mastermaster才是指向提交的,所以,HEAD指向的就是当前分支。

技术图片

每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。

当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

 技术图片

从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:

技术图片

假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:

技术图片

合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支:

技术图片

$git checkout -b dev

创建并切换到dev分支。相当于以下两个命令:

$ git branch dev

$ git checkout dev

$git branch

查看当前分支,git branch命令会列出所有分支,当前分支前面会标一个*号。

$ git branch

* dev

master

$git merge 

合并指定分支到当前分支,例如先$git branch master,切换到master分支,然后$git merge dev,将dev分支合并到master分支。

$git branch -d dev

合并后可以删除dev分支了。

 $git push

把本地库当前分支的所有内容推送到远程库上。

$git pull

从远程库

4.1解决冲突

如果我们有两个分支,feature1和master,我们在两个分支上分别修改了readme.txt并进行了提交,则:

技术图片

这时切换到master分支,然后执行:$git merge feature1。则会造成冲突,使用git status也可以查看冲突。

我们可以直接查看readme.txt的内容:

Git is a distributed version control system.

Git is free software distributed under the GPL.

Git has a mutable index called stage.

Git tracks changes of files.

<<<<<<< HEAD

Creating a new branch is quick & simple.

=======

Creating a new branch is quick AND simple.

>>>>>>> feature1

Git用<<<<<<<=======>>>>>>>标记出不同分支的内容,我们修改如下后保存:

Creating a new branch is quick and simple.

再提交:

$ git add readme.txt 

$ git commit -m "conflict fixed"

[master cf810e4] conflict fixed

现在,master分支和feature1分支变成了下图所示:

技术图片

最后,删除feature1分支。

 

传送门:

[1] https://www.liaoxuefeng.com/wiki/896043488029600/896067008724000

 

以上是关于Git教程的主要内容,如果未能解决你的问题,请参考以下文章

Git教程

git教程1--如何操作本地仓库(保姆级教程,好上手)

Git教程

❤️Git图文使用教程详解

❤️Git图文使用教程详解

❤️Git图文使用教程详解