git简单使用教程

Git介绍

Git 是一个分布式版本控制系统,用于跟踪文件的更改和管理项目的版本历史。它由 Linus Torvalds 于 2005 年开发,旨在取代当时广泛使用的集中式版本控制系统(如 SVN)。

Git 的工作原理是将每个版本的文件和元数据存储在一个称为“仓库”的地方,每个开发者在本地都有一个完整的仓库副本,可以在本地进行更改和提交。当多个开发者同时在同一个项目上工作时,Git 会自动合并他们的更改,并在必要时解决冲突。Git 还提供了强大的分支和合并功能,使得开发者可以在不影响主线代码的情况下进行实验性的开发和合并。

Git 是目前最流行的版本控制系统之一,被广泛用于软件开发、数据科学、设计等领域。

Git工作原理(流程图)

image-20240328111505130

Workspace:工作区(本地的工作目录)
Index / Stage:暂存区(由本地工作目录预提交的内容)
Repository:仓库区或本地仓库(分布式本地仓库,本用户目录)
Remote:远程仓库(远程仓库,所有用户共享目录)

Git和SVN区别

Git 和 SVN 都是版本控制系统,但它们在工作原理、速度、安全性、分支管理等方面存在一些区别:

  1. 工作原理:Git 是分布式版本控制系统,每个开发者都有一个完整的本地仓库,并且可以在本地进行更改和提交。SVN 是集中式版本控制系统,只有一个中央服务器,所有的更改都需要提交到中央服务器。
  2. 速度:Git 的速度比 SVN 快,因为它不需要频繁地与中央服务器通信。
  3. 安全性:Git 的安全性比 SVN 高,因为每个开发者都有一个完整的本地仓库,即使中央服务器出现问题,也不会影响其他开发者的工作。
  4. 分支管理:Git 的分支管理比 SVN 更强大,因为它支持本地分支、远程分支、合并分支等操作,并且可以在不影响主线代码的情况下进行实验性的开发和合并。
  5. 合并操作:Git 的合并操作比 SVN 更简单,因为它使用了智能合并算法,可以自动解决大部分冲突。
  6. 存储方式:Git 以对象的形式存储版本库的数据,而 SVN 以文件系统的形式存储版本库的数据。Git 的存储方式更加高效,占用的空间更小。

Git常用命令使用

以下命令在已经关联好远程仓库的情况开发使用下,若还没有远程仓库,跳转至本章Git关联远程仓库

使用流程:

clone远程项目

1
>git clone https://github.com/username/repository.git

拉取指定分支合并至当前分支,确保本次开发版本为最新版本。

1
>git pull origin 分支名称

将修改完的内容添加到暂存区

1
>git add -A

将暂存区的内容更新到本地仓库

1
>git commit -m "本次更新要写的注释"

将本地仓库内容更新至远程仓库

1
>git push origin 分支名称

版本回退:

查看版本号及更新内容

1
>git log –pretty=oneline

回退至上一个版本

1
2
3
>git reset --hard HEAD^
>git reset --hard HEAD^^ #回退上两个版本
>git reset --hard HEAD~100 #回退上100个版本

回退后使用 git log命令已经查看不到最新的版本了,需要使用git reflog查询,找到最新的版本号,通过指定的版本号获取最新版本,或者直接pull最新版本。

1
2
3
>git reflog
>git reset --hard 版本号
>git pull origin 分支名称

撤销修改:

在未提交之前,发现添加内容有误,想要恢复以前的版本,有如下几种方法可以做修改:

  • 如果知道要删掉那些内容的话,直接手动更改去掉那些需要的文件,然后add添加到暂存区,最后commit掉。
  • 可以按以前的方法直接恢复到上一个版本。使用 git reset –hard HEAD^

但是现在我不想使用上面的2种方法,我想直接想使用撤销命令该如何操作呢?首先在做撤销之前,我们可以先用 git status 查看下当前的状态。

Git会告诉你,git checkout – file 可以丢弃工作区的修改,如下命令:

1
git checkout -- <file>

命令 git checkout –意思就是,把file文件在工作区做的修改全部撤销,这里有2种情况,如下:

  1. file自动修改后,还没有放到暂存区,使用 撤销修改就回到和版本库一模一样的状态。
  2. 另外一种是file已经放入暂存区了,接着又作了修改,撤销修改就回到添加暂存区后的状态。
    可以使用git reset HEAD 将更改撤出暂存区

Git关联远程仓库

在Github上或者其他平台创建一个仓库,拿到它的repository地址

Git命令行创建一个新的版本库

1
2
3
4
5
>git init
>git add README.md
>git commit -m "first commit"
>git remote add origin https://github.com/username/repository.git
>git push -u origin master

Git命令行推送一个已经存在版本库

1
2
>git remote add origin https://github.com/username/repository.git
>git push -u origin master

Git命令详解

git clone

git clone是 Git 版本控制系统中的一个命令,用于从远程仓库克隆一个本地仓库。使用git clone命令可以创建一个新的本地仓库,并将远程仓库的所有历史记录和分支复制到本地。

git clone命令的语法如下:

1
git clone [options] <repository> [<directory>]

其中,options是可选的参数,用于指定一些选项。常用的选项包括:

  • -b:指定要克隆的分支。
  • -l:使用深度克隆,只克隆最近的一次提交。
  • -n:创建一个新的空仓库,不克隆任何内容。
  • -o:指定远程仓库的名称。
  • -q:安静模式,不显示克隆过程的输出。
  • -s:使用浅层克隆,只克隆最近的一次提交。

<repository>是要克隆的远程仓库的地址。如果省略该参数,Git 将从默认的远程仓库(通常是origin)克隆代码。
<directory>是要创建的本地仓库的目录。如果省略该参数,Git 将在当前目录下创建一个新的目录,并将其作为本地仓库的目录。

下面是一些使用git clone命令的示例:

克隆远程仓库的默认分支:

1
git clone https://github.com/username/repository.git

克隆远程仓库的特定分支:

1
git clone -b branch_name https://github.com/username/repository.git

克隆远程仓库的特定标签:

1
git clone -b tag_name https://github.com/username/repository.git

深度克隆远程仓库的特定分支:

1
git clone --depth 1 -b branch_name https://github.com/username/repository.git

git pull

在 Git 中,git pull命令用于从远程仓库拉取最新的更改并合并到本地仓库中。下面是git pull命令的基本用法:

1
git pull [options] [remote] [branch]

其中,options是可选的参数,用于指定一些选项。常用的选项包括:

  • -f:强制覆盖本地修改。
  • -r:递归地拉取子模块的更新。
  • -p:在拉取时进行合并操作。

remote是要拉取代码的远程仓库的名称。如果省略该参数,Git 将从默认的远程仓库(通常是origin)拉取代码。
branch是要拉取的远程分支的名称。如果省略该参数,Git 将拉取远程仓库的默认分支(通常是master)。

下面是一些使用git pull命令的示例:

拉取远程仓库的默认分支:

1
git pull

拉取远程仓库的特定分支:

1
git pull origin branch_name

拉取远程仓库的特定标签:

1
git pull origin tag_name

强制覆盖本地修改:

1
git pull -f

在使用git pull命令时,可能会遇到冲突。如果发生冲突,Git 会提示你解决冲突,并在解决冲突后再次执行git pull命令。

git add

git add是 Git 版本控制系统中的一个命令,用于将工作目录中的文件或目录添加到暂存区中。暂存区是 Git 中用于临时存储待提交更改的区域,在提交更改之前,暂存区中的更改不会被提交到版本库中。

git add命令的语法如下:

1
git add [options] <pathspec>…

其中,options是可选的参数,用于指定一些选项。常用的选项包括:

  • -A:添加所有文件和子目录。
  • -u:只添加已跟踪的文件和子目录中的更改。
  • -i:交互模式,在添加文件之前进行确认。
  • -p:添加时显示文件的差异。

<pathspec>是要添加的文件或目录的路径,可以是一个或多个文件或目录。如果省略<pathspec>,Git 将添加当前目录中的所有文件和子目录。

下面是一些使用git add命令的示例:

添加当前目录中的所有文件和子目录:

1
>git add -A

添加已跟踪的文件和子目录中的更改:

1
>git add -u

添加特定文件或目录:

1
>git add file1.txt dir1/

添加特定文件或目录时显示文件的差异:

1
>git add -p file1.txt

在使用git add命令时,如果文件或目录已经在暂存区中,Git 不会再次添加它们。如果文件或目录已经在版本库中,Git 也不会添加它们。

git commit

git commit是 Git 版本控制系统中的一个命令,用于将暂存区中的更改提交到版本库中。提交操作会创建一个新的提交对象,该对象包含了提交信息、提交者、提交时间和提交的更改等信息。

git commit命令的语法如下:

1
git commit [options] [-m <message>] [-a] [--amend]

其中,options是可选的参数,用于指定一些选项。常用的选项包括:

  • -m <message>:指定提交消息。提交消息是对本次提交的描述,应该简洁明了地描述本次提交的内容。
  • -a:自动添加暂存区中的更改。如果暂存区中有更改,使用-a选项可以省略使用git add命令将更改添加到暂存区的步骤。
  • --amend:修改上次提交。使用--amend选项可以修改上次提交的信息和更改,而不是创建一个新的提交。

下面是一些使用git commit命令的示例:

提交暂存区中的更改:

1
git commit -m "Add new file"

自动添加暂存区中的更改并提交:

1
git commit -a -m "Update file"

修改上次提交:

1
git commit --amend -m "Fix bug"

在使用git commit命令时,Git 会自动生成一个提交消息。如果你没有指定提交消息,Git 会打开一个默认的文本编辑器,让你输入提交消息。提交消息应该简洁明了地描述本次提交的内容,以便其他开发者理解你的更改。

git push

在 Git 中,git push命令用于将本地分支的更改推送到远程仓库中。下面是git push命令的基本用法:

1
git push [options] [remote] [branch]

其中,options是可选的参数,用于指定一些选项。常用的选项包括:

  • -f:强制覆盖远程分支的更改。
  • -u:设置上游分支,以便在后续的推送操作中自动同步远程分支和本地分支。
  • -r:递归地推送子模块的更改。

remote是要推送代码的远程仓库的名称。如果省略该参数,Git 将默认推送代码到origin远程仓库。
branch是要推送的本地分支的名称。如果省略该参数,Git 将默认推送当前分支。

下面是一些使用git push命令的示例:

推送当前分支的更改到origin远程仓库的master分支:

1
>git push origin master

推送本地分支的更改到origin远程仓库的feature分支:

1
>git push origin feature

强制覆盖远程分支的更改:

1
>git push -f origin master

在使用git push命令时,可能会遇到冲突。如果远程分支和本地分支的更改存在冲突,Git 会提示你解决冲突,并在解决冲突后再次执行git push命令。

其他常用命令

  1. git status:查看当前分支的状态。
  2. git diff:查看工作区和暂存区的差异。
  3. git log:查看提交历史。
  4. git branch:创建、删除和切换分支。
  5. git merge:合并分支。
  6. git tag:创建和查看标签
  7. git config --global user.name "Your Name":设置全局用户名。
  8. git config --global user.email "your@example.com":设置全局电子邮件地址。
  9. git remote -v:获取本地所有远程仓库的详细信息.
  10. git log –pretty=oneline:查看版本号及更新内容