热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【git教程】git使用方法

文章目录Git简介版本库工作区暂存区本地仓库远程仓库文件状态ChangesnotstagedforcommitChangestobecommittedUntrackedfilesn


文章目录

    • Git简介
        • 版本库
        • 工作区
        • 暂存区
        • 本地仓库
        • 远程仓库
    • 文件状态
        • Changes not staged for commit
        • Changes to be committed
        • Untracked files
        • nothing to commit, working tree clean
    • 分支管理
        • 查看分支
        • 创建新分支
        • 切换分支
        • 删除分支
        • 删除远程分支
    • .gitignore
    • 基本操作


Git简介

https://git-scm.com/book/zh/v2

Git是目前世界上最流行的分布式版本控制系统,是程序员必须要掌握的工具。

在没有使用版本控制的时候很多人都有过这种经历,如果你正在编写一个程序,经过一段时间的编写你已经积累了很多的文件和代码行,这时候你发现有些代码需要删除或者重构,但是你又担心重构之后的代码出问题,而又无法找回之前的版本,那你只能将目前的代码另存一份,然后每改一次都要另存,久而久之自己也记不清自己要找的代码在哪个版本里面了。随着需求的增加,这时候你需要另外的同学帮忙一块来开发这个程序,你只能将现在的代码发给他,他在你的代码基础上进行开发,最后再手动合并到一块,如果他不小心修改了你的代码,整个代码版本很容易就失控了。

所以我们就需要一个Git可以帮我们自动管理版本的变更,而且可以非常方便地和他人进行协作。


版本库

当我们使用 git init 创建版本库如 task 的时候,在当前目录下会出现一个隐藏的 .git 目录,该目录就是我们版本库的控制目录,我们提交的修改都会记录在这里面,如果把 .git 删除,task 就变成一个普通目录而不是版本库了。


工作区

存放我们代码文件的位置。


暂存区

如同字面意思,就是指暂时存取文件的地方,通过 git add 命令可以将工作区的文件添加到暂存区。暂存区作为一个正式提交至版本库(commit)之前的中转地带,可以让我们临时保存对文件的修改,也可以从暂存区恢复和撤销。


本地仓库

使用 git commit 命令可以将暂存区的文件提交至本地仓库。


远程仓库

我们的作业仓库就是一个远程仓库,它托管在一个中心服务器上,通常我们使用 git clone 命令将远程仓库代码拷贝下来,本地代码更新之后,通过 git push 推送给远程仓库。


文件状态

在仓库目录执行下面的命令可以查看一个文件的状态

git status

我们可能会看到下面几种情况


Changes not staged for commit

工作区中有改内容,但是暂存区没有,我们需要通过 git add 将其添加进暂存区


Changes to be committed

已经被添加进暂存区的文件,可以通过 git commit 提交到版本库,也可以使用 git reset HEAD 来撤销暂存


Untracked files

未追踪的文件,可以通过 git add 添加进暂存区


nothing to commit, working tree clean

工作区所有的更改都已经提交至版本库


分支管理

在我们初始化仓库的时候Git会自动帮我们创建名为 master 的主干分支,在平时的开发中我们通常会创建不同的分支来用于不同的开发目的,例如 master 通常作为主干分支,用于部署生产环境的代码,一般由 develop 分支代码合并而来,任何情况下都不应该直接修改代码。develop 分支作为日常的开发分支,功能开发完毕之后,代码合并进 masterbugfix 分支用来修复 master 的bug,修复完成之后代码需要合并进 masterdevelop

实际情况中比这个一般还要复杂一些,可能还会有一些其他作用的分支。为什么需要这样设计呢?试想一下这样一个场景,大家都在一个主干分支 master 上面开发并且代码已经上线一个版本,然后继续在 master 上面开发新的功能,这时候突然发现了严重的bug需要紧急修复,但是 master 上面的新功能还只开发了一半无法发布版本,只能去修改历史版本的代码,维护比较麻烦。如果我们通过分支的方式来管理就会是下面的步骤了:


  • 首先在 develop 分支开发,等到第一个把版本完成之后,合并进 master,从 master 发布版本
  • develop 分支继续开发新功能
  • master 发现bug需要修复
  • 基于 master 创建 bugfix 分支用于修复bug,bug修复完成合并进 masterdevelop,master 发布新版本上线
  • develop 开发完新功能,继续合并进 master

查看分支

git branch

创建新分支

git branch develop

切换分支

git checkout develop

删除分支

git branch -d develop

删除之前需要先切换到其他分支


删除远程分支

git push -d develop

.gitignore

.gitignore 是Git的忽略文件,用来告诉Git忽略哪些文件,不要将他们加入到追踪列表,.gitignore 会对当前目录及子目录起作用,也可以在不同的目录分别放置,配置示例如下

# 忽略 node_modules/ 目录下所有的文件node_modules# 忽略 dist/ 目录下的所有文件dist# 忽略src下所有的txt文件,包含子目录src/**/*.txt# 忽略src下面的txt,不包含子目录src/*.txt# 忽略所有的md文件.md# 不忽略README.md!README.md

基本操作

我们来看一个基本的Git使用流程


  • 创建本地仓库 test,在空目录 test 执行命令,注意该命令是用来创建版本库,只需要执行一次,也不要在子目录重复执行

git init

  • 设置用户名和邮箱

git config user.name "your_name"git config user.email "your_email"

  • 创建 develop 分支

git branch develop

  • 切换到 develop 分支

git checkout develop

  • 添加文件 index.html

git add index.html

  • 如果我们工作区的文件改错了想要从暂存区恢复,可以执行命令

git checkout index.html

  • 如果我们错误地添加了文件或改动到暂存区,可以执行命令撤销

git reset HEAD index.html

这里的HEAD就是指向当前分支的一个指针


  • 提交暂存区的文件到版本库

git commit -m "message"

  • 查看提交历史

git log

如果要查看最近的两条详情

git log -p -2

  • 合并 develop 分支到 master

git checkout mastergit merge develop

  • 如果我们想要把仓库推到远程服务器,需要先创建好远程仓库地址,然后将本地仓库和远程仓库链接起来,如

git remote add origin https://git.xxx.com/repo/test

这里的origin是我们习惯的远程仓库的别名,你也可以选择其他的名字或者链接到多个不同的远端仓库地址,但是对于同一个远端地址不要重复添加。


  • 推动本地仓库到远端仓库

git push -u origin master

这里的origin是我们前面添加的远端仓库地址的别名,master是分支名称,表示把本地的 master 推送至origin的 master 分支,-u 参数可以让我们以后省略后面的参数,可以直接执行

git push

git push会验证用户的身份


  • 如果别人想要通过远端仓库地址下载这个代码库,可以执行命令

git clone https://git.xxx.com/repo/test

这个命令会自动克隆代码到当前目录的 test 目录,如果你想指定一个其他的名字,可以使用

git clone https://git.xxx.com/repo/test test2

  • 如果想要获取最新的远端仓库代码,可以执行

git pull

如果要取远端仓库的指定分支

git pull origin develop

推荐阅读
  • 本题涉及一棵由N个节点组成的树(共有N-1条边),初始时所有节点均为白色。题目要求处理两种操作:一是改变某个节点的颜色(从白变黑或从黑变白);二是查询从根节点到指定节点路径上的第一个黑色节点,若无则输出-1。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文探讨了如何像程序员一样思考,强调了将复杂问题分解为更小模块的重要性,并讨论了如何通过妥善管理和复用已有代码来提高编程效率。 ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 本文详细介绍了Git分布式版本控制系统中远程仓库的概念和操作方法。通过具体案例,帮助读者更好地理解和掌握如何高效管理代码库。 ... [详细]
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • 在本周的白板演练中,Apache Flink 的 PMC 成员及数据工匠首席技术官 Stephan Ewen 深入探讨了如何利用保存点功能进行流处理中的数据重新处理、错误修复、系统升级和 A/B 测试。本文将详细解释保存点的工作原理及其应用场景。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • Git管理工具SourceTree安装与使用指南
    本文详细介绍了Git管理工具SourceTree的安装、配置及团队协作方案,旨在帮助开发者更高效地进行版本控制和项目管理。 ... [详细]
  • Python 学习是否需要先掌握 C 语言?
    Python 是一门非常适合编程入门的语言,很多人疑惑是否需要先学习 C 语言才能更好地掌握 Python。本文将详细探讨这个问题,并为初学者提供专业的建议。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
author-avatar
他给我留下的美好_813
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有