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),然后解压,依次输入:./config
,make
,sudo 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 commit
或git 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
严格来说不是指向提交,而是指向master
,master
才是指向提交的,所以,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教程的主要内容,如果未能解决你的问题,请参考以下文章