欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Git基操

程序员文章站 2022-05-02 07:52:36
...

一、git简介

1.1、git概述

Git是分布式版本控制系统(Distributed Version Control System,简称 DVCS) ,分为两种类型的仓库:本地仓库和远程仓库。 下载地址:https://git-scm.com/download

  • 本地仓库:是在开发人员自己电脑上的Git仓库

  • 远程仓库:是在远程服务器上的Git仓库

    Git基操

1.2、git工作流程

  1. 从远程仓库中克隆代码到本地仓库(git clone)
  2. 从本地仓库中checkout代码然后进行代码修改(checkout)
  3. 在提交前先将代码提交到暂存区(add)
  4. 提交到本地仓库。本地仓库中保存修改的各个历史版本(commit)
  5. 修改完成后,需要和团队成员共享代码时,将代码push到远程仓库(push)

Git基操

1.3、Git常用的代码托管平台

​ 我们的远程仓库就建立在代码托管平台上,常见的有GitHub,GitLab,还有码云等

  • itHub( 地址:https://github.com/ )是一个面向开源及私有软件项目的托管平台,因为只支持Git 作为唯一的版本库格式进行托管,故名gitHub
  • 码云(地址: https://gitee.com/ )是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快
  • GitLab (地址: https://about.gitlab.com/ )是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务

二、Git常用命令

2.1、环境配置

  • 设置用户信息

    git config --global user.name "name" # 设置git用户名
    git config --global user.name "email"# 设置git邮箱
    
  • 查看用户的配置信息

    git config --list # 查看git的配置
    git config user.name # 查看git的用户名
    git config user.email #查看邮箱
    

    Git基操

    通过上面的命令设置的信息会保存在C盘用户目录下的.gitconfig文件中

    Git基操

2.2、获取Git仓库

要使用Git对我们的代码进行版本控制,首先需要获得Git仓库

  • 可以通过clone命令从远程仓库克隆一个到本地

    Git基操

  • 可以通过init命令在本地初始化一个Git仓库

    Git基操

通过以上两种方式都可以在本地撞见一个仓库,它会生成一个.git的文件,有这个文件代表着是一个git本地仓库

2.3、工作目录、暂存区和版本库

  • 前面看到的.git隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等
  • 包含.git文件夹的目录就是工作目录,主要用于存放开发的代码
  • .git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方

Git基操

Git工作目录下的文件存在两种状态:

  1. untracked未跟踪状态(未被纳入版本控制)
  2. tracked已跟踪(被纳入版本控制)
    • unmodified 未修改状态
    • modified 已修改状态
    • staged已暂存状态

2.4、本地仓库操作

  1. git status 查看文件状态

Git基操

我们新建了一个.gitignore文件(可以在这个文件里面配置哪些文件不必纳入版本控制),此时查看文件状态发现.gitignore是未被跟踪状态,也可以使用git status -s 命令简介的显示文件状态

Git基操

​ 2. git add 将文件添加到暂存区

Git基操

此时查看再次查看文件状态

Git基操

  1. git reset 将暂存区的文件取消暂存

我们添加到暂存取得文件并没有提交到本地的仓库,可以通过git reset命令取消暂存,再次查看文件,文件又处于未被跟踪状态.

Git基操

  1. git commit 将暂存区文件提交到仓库

Git基操

参数-m的意思是记录提交的日志,想要commit必需要经过add

  1. git rm 删除文件

    Git基操

    此时显示.gitignore文件已经被删除,但是这只是删除了工作区的文件并没有删除本地仓库的文件。

    将删除操作提交到本地仓库

Git基操

注意:使用git rm 删除后默认进入暂存区可以直接commit,但是如果在windows中删除则需要add

  1. .gitignore忽略文件

    一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以在工作目录中创建一个名为 .gitignore 的文件

    Git基操

    7.git log 查看日志记录

    Git基操

2.5、远程仓库操作

  1. git remote 查看远程仓库

    Git基操

    如果本地仓库是直接从远程仓库clone的,我们可以看到一个origin 。这是Git克隆的仓库服务器的默认名字。

    如果没有指定远程仓库,则啥也没有

    Git基操

  2. 添加和断开远程仓库

    git remote add 添加一个新的远程 Git 仓库,同时指定一个可以引用的简写

    Git基操

    如果想要断开与远程仓库的连接可以使用git remote remove [仓库(origin)]注意:此命令只是从本地移除远程仓库的记录,并不会真正影响到远程仓库Git基操

    Git基操

    远程仓库可以添加多个

    Git基操

  3. 从远程仓库克隆

    如果你想获得一份已经存在了的 Git 仓库的拷贝,这时就要用到 git clone 命令。 Git 克隆的是该 Git 仓库服务器上的几乎所有数据(包括日志信息、历史记录等),而不仅仅是复制工作所需要的文件。 当你执行 git clone 命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。

    命令形式:git clone [url]

    Git基操

  4. 从远程仓库fetch

    git fetch 是从远程仓库获取最新版本到本地仓库,它会将数据放在git文件的object文件里面,我们找不到,它不会自动merge,fetch过后需要使用merge命令将本地仓库的数据和fetch来的数据合并。

    命令形式:git fetch[remote-name] [branch-name]

    ​ git merge[remote-name]/ [branch-name]

    Git基操

    注意:如果本地仓库不是从远程仓库克隆而来而是init初始化而来。则第一次合并或者提交的时候会出现fatal:refusing to merge unrelated histories,我们需要在命令后面加上–allow-unrelated-histories,表示允许不相关的历史

  5. 从远程仓库pull

    命令形式:git push [remote-name] [branch-name]

    Git基操

    如果第一次出现出现fatal:refusing to merge unrelated histories,也需要加上–allow-unrelated-histories

  6. 将本地仓库代码推送到远程仓库

    当你想分享你的代码时,可以将其推送到远程仓库。 命令形式:git push [remote-name] [branch-name]

2.6、Git分支

​ 几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。master分支是git仓库的默认分支。

  1. 查看分支

    列出所有本地分支:git branch

    列出所有远程的分支:git branch -r

    列出所有本地分支和远程分支:git branch -a

    Git基操

  2. 创建分支

    命令格式:git branch [branch_name]

    Git基操

  3. 切换分支

    使用git checkout [branch_name]可以切换分支,前面的*和绿色就表示当前分支

    Git基操

    在当前分支下创建一个文件master2.txt并push到远程仓库maste2分支,此时master分支没有master2.txt文件。

    当我们切换到master分支没有master2.txt文件

    Git基操

    当我们切换到master2分支,发现master2.txt文件

    Git基操

  4. git合并分支

    命令格式:git merge [branch_name]

    Git基操

    注意:如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没办法合并它们,同时会提示文件冲突。此时需要我们打开冲突的文件并修复冲突内容,最后执行git add命令来标识冲突已解决

  5. 删除分支

    git branch -d [branch_name]

    如果要删除的分支中进行了一些开发动作,此时执行上面的删除命令并不会删除分支,如果坚持要删除此分支,可以将命令中的-d参数改为-D

    git branch -D [branch_name]

    Git基操

    如果要删除远程仓库中的分支,可以使用命令git push origin –d [branch_name]

    Git基操

    Git基操

    此时远程仓库只剩下master分支,没有master2分支

2.7、Git标签

Git 可以给历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 、v1.2等)。标签指的是某个分支某个特定时间点的状态。通过标签,可以很方便的切换到标记时的状态。

  1. 创建标签

    git tag [tag_name]创建一个新的标签

    Git基操

  2. 列出标签

    git tag查看有哪些标签

    git show [tag_name] 查看标签的详细信息

    Git基操

  3. 将标签推送到仓库

    git push [remote] [brance] [tag_name]

    Git基操

    可以看到远程仓库多了一个v1.0标签

    Git基操

  4. 新建一个分支,指向某个标签

    命令格式:git checkout -b [branch] [tag]

    Git基操

  5. 删除标签

    git tag -d [tag_name] 删除本地标签

    git push [remote] [branch] :refs/taags/[tag_name] 删除远程标签

    Git基操

三、Git时光机

Git基操

3.1、reset和checkout

​ 在工作中,一旦误删了文件或者是把文件弄乱了,我们可以从最近的一个commit版本恢复。git log命令 显示从最近到最远的提交日志,可以见看到我们各个版本的日志每个版本都有一个commit id,其HEAD表示当前版本,HEAD表示上一个版本,HEAD表示上上一个版本,往上100个版本可以写成HEAD加连续100个,也可以写成:HEAD~100。

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

Git基操

**git log --pretty=oneline:**将只会显示提交的commit id号和对应的注释。

Git基操

回退到上一个版本

git reset --hard HEAD^

Git基操

已经成功回退到上一个版本,此时执行以此git log,已经没有第三个版本的信息

Git基操

此时我们如果想要恢复到第三个版本,我们需要使用 git reflog来查看过的你使用过的每一条命令

Git基操

执行命令 git reset --hard [commitId]

Git基操

Git基操

已经回到第三个版本!

git reset --soft [id] :最近一次提交节点的提交记录回退到暂存区。此时a.txt已经添加到暂存区但是未被提交

Git基操

git reset --mixed HEAD^ :将最近一次提交节点的提交记录回退到工作区

Git基操

如果想要将暂存区的内容回退到工作区直接使用git reset 命令。

如果想要清除工作区某个文件的修改可以使用 git checkout – [file_name]命令,git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

3.2、revert

git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。

参考连接:https://blog.csdn.net/yxlshk/article/details/79944535

参考连接:https://www.jianshu.com/p/09dbd8dc7345

相关标签: Git git