Git起步

Git起步


注:本文仅针对于git初学或之前未接触版本号控制工具的同学,希望能帮助大家高速入门。

温馨提示:

大家可跟着文章一步步去操作。建议先用一个试验的demo去学习操作。

假设直接用真实的合作项目练习,误操作有可能会存在坑队友的情况。

1. 关于版本号控制

在进入主题之前,我们先来了解一下版本号控制。

我们在使用一个工具前。一定要明白自己在做什么,这个工具给我们带来什么优点。

所谓版本号控制,事实上就是一种记录一个或若干文件内容变化。以便将来查阅特定版本号修订情况的记录系统。

简而言之。就是假如你在做一个项目。项目在不断迭代开发。代码就会有变化。借助版本号控制工具,你就能查看不同版本号的区别,方便你找到你想要的版本号,并能通过一个简单的操作或命令就能回到你想要的版本号。有或者,你在做这个项目时。是与其它人一起合作。你们分别负责当中一部分。最后。通过版本号控制工具,能够非常方便的将你们的代码合并子在一起。

所以。我们能够看出。版本号控制就是简化迭代开发和多人合作的工具。

Git就是一款年轻而轻巧的版本号控制工具。

具体的非常多概念我们不做赘述,本文的主旨就是Git的高速入门。

在实际工作中多人合作以及项目开发最频繁的操作:

1.将多人合作项目从远程仓库获取到本地;

2.提交改动;

3.建立本地分支。

4.同步远程更新;

5.推送更新至远程。

6.分支合并;

7.删除本地分支和远程分支;

8.查看日志和区别。

2. 准备工作

在一切项目開始之前,我们需先安装Git。Git的安装方法还是非常多的,最简单的方法能够去官网下载安装文件来进行安装。假设安装了Homebrew,运行

sudo brew install git

命令就能够安装了。其它的安装方法(如通过源代码安装等)就不赘述,感兴趣的同学能够自己深入研究。

安装好了Git,首先要完毕一些主要的配置。设置username称与邮件地址非常重要。由于每一个 Git 的提交都会使用这些信息。而且它会写入到你的每一次提交中,不可更改:

git config --global user.name "Your Github Nickname"
git config --global user.email xxx@xxx.xxx

再次强调。假设使用了 –global 选项,那么该命令仅仅须要运行一次,由于之后不管你在该系统上做不论什么事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的username称与邮件地址时,能够在那个项目文件夹下运行没有 –global 选项的命令来配置。

再者。介绍一个比較经常使用的命令:

git config --list

查看当前的全部配置信息,包含username、邮箱、默认的打开编辑器及分支关联信息等。

3. 建立项目和初始化操作

完毕了基本配置,我们能够開始项目了。假设是对本地现有项目进行管理,运行

git init

将创建一个名为 .git 的子文件夹,这个子文件夹含有你初始化的 Git 仓库中全部的必须文件,这些文件是 Git 仓库的骨干。

只是。本文针对的还是基于已有的远程仓库,实现多人合作开发。运行下面命令([url]为github上项目的地址)。

git clone [url]

就可将远程仓库的项目代码拷贝到本地。且完毕了初始化操作。即多人合作项目在本地就有一个副本了。我们能够通过这个副本来做自己的任务开发了。

4. 提交改动

有了项目。假如我们如今在项目中做了改动。会怎样呢?我们先了解几个概念。

地仓库由 Git维护的三棵“树”组成。第一个是你的工作文件夹,它持有实际文件;第二个是缓存区(Index),它像个缓存区域,暂时保存你的改动;最后是HEAD,指向你近期一次提交后的结果。如图:

我们假设对项目的文件进行了增删改等一系列操作,产生了文件的差异,则Git会将文件标记为modified(新增文件标记为new file;删除文件标记为deleted),此时这些文件就处于暂存状态。

这时我们能够開始学习一个重要的相关命令。

git status

通过这个命令。我们能够查看当前文件的状态。事实上这个命令在每一步都能够使用。它的作用是查看当前的文件状态,兴许操作我们还会使用到这个命令。

比如,我在项目中编辑了一个README.md文件运行这个命令,显演示样例如以下:

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

此时,我们就看到了文件的README.md文件处于更改的暂存状态。下一步我们就用该将暂存文件增加缓存中。

细心的同学应该发现了。在显示内容的提示中,Git已经告诉我们下一步该怎么做了。

git add <file>

通过这个add命令,我们就能将想要增加的文件增加缓存区域。当中file指的就是文件名称。增加我一次改动的文件比較多。想批量增加,则将用“*”或者“.”取代就可以。例如以下:

git add *

这时。我们再运行git status查看,就例如以下显示:

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   README.md

Git又一次提示我们下一步该怎么做了。如今,通过add指令。我们的文件已经增加缓存区了。即图片中的index相应的状态。我们要生成一个版本号快照,在运行例如以下指令就可以:

git commit -m ‘edit your message at here‘

在-m參数后,我们能够编辑我们的版本号显示信息。这样一来,我们的改动编辑操作就完毕了,生成了一个新的版本号快照。细心的同学可能在add操作时,看提示信息就又有新发现了。一个叫git reset HEAD <file>的指令。这个指令就是还原add操作。

假如我将一个文件增加进缓存了,可是我突然又想改动这个文件,此时直接改动是会产生两个不同版本号的冲突。

事实上。通过这个命令撤销增加缓存的操作,将文件改为暂存状态,我们就能够继续编辑了。

回到主线上来,当我们完毕了一个版本号的改动后。并生成了快照,我们就应该公布了,这样远程的仓库也会得到更新。可是,我们先不着急推送。我们还须要在之前增加一个非常关键的步骤。

5. 建立本地分支和获取远程分支

事实上,在实际项目中,多人协作开发。是有不同的分支的,每一个人都在自己的分支上开发自己的功能,最后将大家的功能合并在一起。就完毕了一次协作。所以。之前说的须要增加的关键步骤就是新建分支。

首先,我们简单了解一下分支是做什么的。 Git对数据的保存。原理是记录一系列不同一时候刻的文件快照。Git的分支,事实上本质上是指向提交对象的可变指针。Git的默认分支名字是master。 在多次提交操作之后,你事实上已经有一个指向最后那个提交对象的master分支。

它会在每次的提交操作中自己主动向前移动。

我们实际项目中,master分支是用来稳定版本号的,大家的操作都是从master上再又一次拉出一个新的分支。然后在这个新分支上做自己的项目研发。

我们通过

git branch

就能够查看本地分支了。

新建一个分支的操作就是在此命令后加上分支名。

git branch <分支名>

比方。我们能够通过git branch testing来创建一个名为testing的分支。此时具有master和testing两个分支。如图:

有了多个分支。我们就能够通过

git checkout <分支名>

来切换到相应的分支名下。

Git中有个名为 HEAD 的特殊指针。它能指向当前分支。

如,当我们切换到testing分支下。就例如以下图所看到的:

git branch命令查看,就能发现当前分支前有“*”号标记。

$ git branch
  master
* testing

上述的新建并切换到新分支操作,能够合并成一个命令:

git checkout -b <分支名>

当然,有时候,我们可能会将远程仓库的分支获取到本地。

这时。我们运行下面这个命令:

git checkout -b <本地分支名> origin/<远程分支名>

为了方便起见,通常本地分支名和远程分支名用同一个名称。

比如,将远程的test分支获取到本地,运行git checkout -b test origin/test就可以。

当中的origin指的就是远程仓库,origin是默认的命名。

6. 同步远程更新

如今,我们已经知道怎样建立一个新分支了,也知道怎样将更新作为一个快照提交了。

如今要做是不是能提交到远程更新了呢?先不着急提交。

我们还须要完毕一个更新操作。

由于我们本地开发。假如我们的合作伙伴也完毕了开发,而且将更新提交到了远程仓库,这时候远程的仓库就会由于他的提交,使得版本号向前推进。而我们本地的版本号还是比較早的,所以。我们需呀同步一下远程仓库而使得本地的版本号也是最新的。

我们借用一个简单的指令:

git pull

这个指令事实上是两个操作的结合(操作可拆分,但我们这里暂不做具体说明)。就是更新和合并操作(合并内容后面会给大家说明)。

事实上。这个命令,就是将远程的版本号更新同步到本地,并将当前分支相应的远程分支更新的内容也合并到本地分支。

可是,假设是新的分支。那么在运行这个指令时,会提示找不到关联的分支。例如以下所看到的:

There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> test

这是由于git pull这个指令是将默认的分支远程同名分支相关联的,新建的本地分支还没有与之关联的远程分支。--set-upstream表示的意思就是增加关联。这时。我们能够依照提示的信息去解决问题。会提示找不到相关的远程分支。可是我们不必着急。我们接着学习下一步内容,问题自然就会解决。

7. 推送更新至远程

我们在本地新建了分支,仅仅是在本地存在而已,我们要将新内容更新到远程,就能够运行下面指令:

git push

这时,就能把更新的内容推送到远程了。可是,新分支就不会这么顺利,它会显演示样例如以下信息:

$ git push
fatal: The current branch test has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin test

信息提示就非常明白了,我们仅仅须要运行git push --set-upstream origin test就能将本地分支推送到远程。这时,远程仓库中就会有我们的新分支而且将我们本地的分支与远程的分支做了关联。

第一次操作新分支,增添了关联。操作此分支,就不用再反复操作了。直接用git pullgit push就能够同步和公布当前分支的内容了。

当然,设置关联的方法还有非常多。这里不赘述。还记得之前在准备工作中提到的

git config --list指令吗,我们通过这个指令就能发现我们的配置增加了新内容。多了一行:

branch.test.remote=origin
branch.test.merge=refs/heads/test

这就是配置信息中增加的关联项。

8. 分支合并

如今。我们知道了怎样将改动的内容提交并发送到远程仓库中。可是,既然是多人合作。我们还有关键的一步,就是合并分支。什么事合并分支呢?前面我们也简单提到过了分支的合并。

如今,就为大家说明。我们做多人合作项目,每一个人的开发任务都在自己的分支上进行。可是一次项目的迭代,可能须要多个人完毕不同的功能,最后将这些功能合在一起,就完毕了一次迭代。我们要拥有其它人分支上的代码,就要做合并操作。通过:

git merge <目标分支名>

就能将目标分支的代码合并过来了。

比方,我在test1分支上开发完毕了一个功能,队友在test2上完毕了他的功能,最后,我们要将两个人的功能合在一起完毕这开发。

那么,我们能够这样操作:提交并推送自己的分支改动到远程关联分支,这时,工作文件夹就是干净的。

接下来,假设我们本地没有合作伙伴的分支test2。我们能够将分支从远程获取到本地。假设本地已经存在了test2分支,就能够切换到test2分支上了。通过git pull将test2分支的内容更新,这时我们本地的test2分支就跟远程的内容同步了,即拥有了队友的更新内容。接下来,我们再切换回自己的分支test1,这时候。运行git merge test2就能够将test2分支的更新内容合并到自己的test1分支上了,这时,我们的test1分支就拥有了自己和队友的更新内容了。这时,我们再运行git push就能将远程存库的内容更新了。

当然。这是合并分支最理想的情况了。假如我们和队友同一时候改动了同一个文件切存在改动差异了,这时就会提示合并失败,通过git status我们能够查看存在冲突的文件,和队友协商改动完冲突文件后。在运行add、commit、push一系列与提交更新并公布同样的指令流程。

9. 删除本地分支和远程分支

有了新建分支、更新和推送的基础,我们能够学习删除分支了。当我们发现有些分支不再须要时。我们能够选择将该分支删除了。

删除本地分支,能够通过:

git branch -d <分支名>

就能够删除本地分支了。

若分支还处于编辑状态,比方正在merge,运行这个命令是失败的。会提示有文件正在编辑。假设确定删除。我们能够强删。运行:

git branch -D <分支名>

此命令就是强删,慎用,除非非常确定。

假设该分支还有远程关联的分支。我们还须要把远程仓库中的分支删除,运行:

git push origin :<分支名>

就能够删除远程的该分支了,原理非常easy,就相当于push了一个空分支去覆盖了远程的这个分支,实现了删除的效果。当然。高版本号的Git提供了新方法:

git push origin --delete <分支名>

注意,这个命令中假设将--delete參数简写成-d是无效的。

10. 查看日志和区别

在公布前或公布后,查看一下提交日志是个好习惯。

通过

git log

就能查看到全部的提交记录。当中的一些參数就不赘述了。再者,就是文件差异。使用

git diff 

可查看暂存前后的文件差异。

通常,我们通过这个指令在add增加缓存前。能够查看编辑的文件和上一个版本号的快照差异。

若文件已增加暂存,通过

git diff --cached

就可查看增加缓存前后的变化。

结语

相信。看到这里,你已经大致了解了Git和的一些基本使用和原理。本文内容是bootstrap官网Git简易教程

Git社区參考书前三章内容的学习总结。

简易教程以图形化、少内容的方式展示,给我们提供了学习Git的主要命令快捷途径。Git社区參考书内容丰富。从原理剖析,实例化的操作过程,是深入学习Git的极佳途径。

本文将两者作为參考,在简易教程的基础上。增加了精简后的Git參考书内容,希望大家能在高速掌握Git使用的同一时候,也明白操作的原理和文件变化的趋势。

时间: 2024-10-10 07:14:15

Git起步的相关文章

【转】Git详解之一:Git起步

原文网址:http://blog.jobbole.com/25775/ 原文:<Pro Git> 起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git 会如此流行,为什么你应该立即开始使用它.(查看Git详解系列的全部文章) 1.1 关于版本控制 什么是版本控制?我真的需要吗?版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统.在

Git详解之一 Git起步

来自:http://www.open-open.com/lib/view/open1328069609436.html 起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git 会如此流行,为什么你应该立即开始使用它. 1.1 关于版本控制 什么是版本控制?我真的需要吗?版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统.在本书所展示的

Git详解之一:Git起步

原文:<Pro Git> 起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git 会如此流行,为什么你应该立即开始使用它. 1.1 关于版本控制 什么是版本控制?我真的需要吗?版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统.在本书所展示的例子中,我们仅对保存着软件源代码的文本文件作版本控制管理,但实际上,你可以对任何类型的文件进

Git起步--git安装与初次运行git前配置

在你开始使用 Git 前,需要将它安装在你的计算机上. 即便已经安装,最好将它升级到最新的版本. 你可以通过软件包或者其它安装程序来安装,或者下载源码编译安装. 一.Git安装 1. 在linux上安装 我们可以使用发行版包含的基础软件包管理工具来安装,如果基于Fedora,我们可以使用  $ sudo yum install git 如果基于Debian,我们可以尝试apt-get  $ sudo apt-get install git Git 官方网站上有在各种 Unix 风格的系统上安装步

【版本控制】Git起步

1. Git命令行 ? ~ git usage: git [--version] [--help] [-C <path>] [-c name=value] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [-p|--paginate|--no-pager] [--no-replace-objects] [--bare] [--git-dir=<path>] [--work-tree=<

git起步_基本使用

现简述一下git的安装和使用. 安装: 有关git于svn区别及其优势不再赘述,现简介其使用方法,因为我的电脑是win7系统,所以需要到官网(https://git-for-windows.github.io/)下载msysgit.(图形界面的话还需安装TortoiseGit) 下载完成,双击安装,一路选择默认设置即可. (选择使用git的命令行模式,选择默认git Bash模式即可) (选择换行格式,默认选第一个windows下使用的跨平台样式即可). 安装完成后,找到刚刚安装的git ,其中

Git 起步

一.版本管理系统VCS 版本管理系统,顾名思义,就是当你的文件有任何改变时所产生的各种文件版本.而git只不过是属于其中的一种.如今的版本管理系统大致可以分成两种:集中式版本管理,分布式版本管理系统.现在大多用的分布式管理系统. 集中式版本管理系统和分布式管理系统的区别:图一为分布式,图二为集中式                        因此,区别就在于:分布式是直接把一个文件相关的所有版本历史都从服务器上复制一份到本地的电脑,而集中式单单复制一个文件. 二.git简史 从前有一个分布式系

progit 之 git 起步(1)

了解git为什么这么流行,为什么应该使用git 以及 如何设置及使用git 关于版本控制 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.有了它就可以将文件回溯到之前的状态,甚至将整个项目都回溯到过去某个时间点的状态. 本地版本控制系统 许多人习惯用复制的方式来保存不同的版本,或许还会改名加上备份时间以示区别.这么做的唯一好处是简单,但是很容易犯错.为了解决这个问题,人们很久以前就开发了许多本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异. 其

【Tools】Pro Git 一二章读书笔记

记得知乎以前有个问题说:如果用一天的时间学习一门技能,选什么好?里面有个说学会Git是个很不错选择,今天就抽时间感受下Git的魅力吧. Pro Git (Scott Chacon) 读书笔记: 第一章:Git起步 版本控制出现的原因及分类 类别 基本原理 优点 缺点 本地版本控制系统 自己把复制整个项目,改名或加上备份时间来区别 采用某种简单的数据库来记录文件的历次更新差异 简单 有时会混淆所在的工作目录, 丢了文件毛了数据就没有后退的路 集中化的版本控制系统 解决在不同系统上的开发者协同工作,