GitHub项目管理详细教程/git教程【有图有代码】

2023-10-31

在使用GitHub进行项目管理的之前,首先需要自己创建一个仓库,自己用的话可以设置为私有的。

一、Git 基本操作

Git 常用的是以下 6 个命令:git clone、git push、git add 、git commit、git checkout、git pull,后面会详细介绍。
在这里插入图片描述
常见命令如下:

  • git add
git add # 添加文件到暂存区
(git add . 添加当前目录下的所有文件到暂存区)
  • git status
git status	#查看仓库当前的状态,显示有变更的文件。
(一般有参数 -s 来获得简短的输出结果:git status -s)
  • git diff
git diff	#比较文件的不同,即暂存区和工作区的差异。
(尚未缓存的改动:git diff
查看已缓存的改动: git diff --cached
查看已缓存的与未缓存的所有改动:git diff HEAD
显示摘要而非整个 diff:git diff --stat
)
  • git commit
git commit	#提交暂存区到本地仓库。
(一般有参数 -m [message] 可以是一些备注信息,
和-a 参数设置修改文件后不需要执行 git add 命令,直接来提交
例如git commit -am '修改 hello.php 文件' #可以省略git add 操作
  • git reset(可以用于清除缓存区[git add]的文件)
git reset	#回退版本。
(语法格式如下:
git reset [--soft | --mixed | --hard] [HEAD]
--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
--soft 参数用于回退到某个版本。
--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交。注意:谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。
HEAD 说明:
	HEAD 表示当前版本
	HEAD^ 上一个版本
	HEAD^^ 上上一个版本
	HEAD^^^ 上上上一个版本
	以此类推...
可以使用 ~数字表示
	HEAD~0 表示当前版本
	HEAD~1 上一个版本
	HEAD^2 上上一个版本
	HEAD^3 上上上一个版本
	以此类推...
例如:
$ git reset HEAD^            # 回退所有内容到上一个版本  
$ git reset HEAD^ hello.php  # 回退 hello.php 文件的版本到上一个版本  
$ git  reset  052e           # 回退到指定版本
  • git rm
git rm	#将文件从暂存区和工作区中删除。
(例如
将文件从暂存区和工作区中删除:
git rm <file>
git rm runoob.txt 
如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f。
强行从暂存区和工作区中删除修改后的 runoob.txt 文件:
git rm -f runoob.txt 
如果想把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可:
git rm --cached <file>
git rm --cached runoob.txt
可以递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件:
git rm –r *

git mv #移动或重命名工作区文件。
git log #查看历史提交记录
git blame #以列表形式查看指定文件的历史修改记录
git remote #远程仓库操作
git fetch #从远程获取代码库
git pull #下载远程代码并合并
git push #上传远程代码并合并

二、Git 配置

git config有三个目录分别是:

  • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
  • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
  • 当前项目的 Git 目录中的配置文件(也就是工作目录中的 .git/config 文件):这里的配置仅仅针对当前项目有效。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

1、配置个人的用户名称和电子邮件地址

git config --global user.name "runoob"
git config --global user.email test@runoob.com

如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。

如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

2、查看配置信息

要检查已有的配置信息,可以使用 git config --list 命令:

$ git config --list
http.postbuffer=2M
user.name=runoob
user.email=test@runoob.com

vim ~/.gitconfig也是一样可以自己看和修改。

三、Git 工作区、暂存区和版本库

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:
在这里插入图片描述

  • 图中左侧为工作区,右侧为版本库。在版本库中标记为 “index” 的区域是暂存区(stage/index),标记为 “master” 的是 master 分支所代表的目录树。

  • 图中我们可以看出此时 “HEAD” 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

  • 图中的 objects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下,里面包含了创建的各种对象及内容。

  • 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

  • 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

  • 当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

  • 当执行 git rm --cached <file> 命令时,会直接从暂存区删除文件,工作区则不做出改变。

  • 当执行 git checkout . 或者 git checkout -- <file> 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。

  • 当执行 git checkout HEAD . 或者 git checkout HEAD <file> 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

四、上传自己的项目到GitHub仓库

第一次

git remote add origin https://github.com/zhouzikang/test1.git
git branch -M main
git push -u origin main

注意改为自己的GitHub项目地址。
如果出现error: remote origin already exists.,可以使用:

git remote rm origin

第二次

git add .
git commit -m "修改说明"
git push

分支操作

  • 在 git 中,可以使用如下命令来查看分支。
git branch # 查看所有本地分支
git branch -a # 同时查看远程分支
git branch -r # 只查看远程分支
git branch -av # 查看所有分支(本地和远程)并且标识当前正在使用的分支
git branch -avv # 查看所有分支(本地和远程)并且标识当前正在使用的分支,并且列出最后一次提交的信息
  • 创建分支命令:
git branch (branchname)
# 例如
$ git branch testing
  • 切换分支命令:
git checkout (branchname)
# 例如
$ git checkout testing
Switched to branch 'testing'

当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。

我们也可以使用 git checkout -b (branchname) 命令来创建新分支并立即切换到该分支下,从而在该分支中操作。

$ git checkout -b newtest
Switched to a new branch 'newtest'
  • 合并分支命令:
git merge 

合并冲突
合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改。

  • 删除分支命令:
git branch -d (branchname)
# 例如
$ git branch -d testing
Deleted branch testing (was 85fc7e7).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GitHub项目管理详细教程/git教程【有图有代码】 的相关文章

  • Git 子树导出和重新导入问题

    我有一个更大的 git 存储库 A 它与我的另一个项目 B 共享一定量的代码 为了使维护更容易 我决定使用公共代码 C 创建第三个存储库 然后通过git subtree 我准备了 A 中的所有内容 将通用代码放在文件夹 sub 中 并使用了
  • 如何配置“git diff”以使用 emacs diff [重复]

    这个问题在这里已经有答案了 是否可以配置 git diff 以使用 emacs diff 如果是的话 你能告诉我怎么做吗 谢谢 看这个问题 如何使用视觉差异程序查看 git diff 输出 https stackoverflow com q
  • 改进 IntelliJ 注释(git Blame)

    我想改进 注释选项 右键单击代码行号冒号 gt 注释 它类似于 gitblame 但集成到 IntelliJ 1 这可能吗 通过插件或 IntelliJ 文件的原始修改 还有其他什么吗 2 我使用的是 Android Studio 基于 I
  • 从 master 分支部署特定功能

    假设我们使用两个分支进行开发 staging and master 在迭代期间 所有团队成员所做的所有更改都会定期合并到staging分支并出现在我们的暂存环境中 客户能够查看更改并提供反馈 在迭代结束时我们合并staging分支到mast
  • 在 GitHub 上看不到“在 Xcode 中打开”按钮

    正如在GitHub 和 Xcode 9 中的新源代码管理工作流程 https developer apple com videos play wwdc2017 405 time 204Apple 视频会话 我们可以直接从 Xcode 克隆项
  • Git 将新的本地分支推送到远程,无需指定名称

    当针对特定的跟踪问题进行补丁修复时 我们的工作流程如下所示 1 git checkout patch git pull upstream patch make sure we re up to date 2 git checkout b i
  • 为什么 iTerm2 中不显示 git 颜色

    所以我有我的 gitconfig 设置来处理颜色 在终端中它工作得很好 看起来也不错 然而 在 iTerm2 中 除非我为 git 设置反向属性 否则我的 gitconfig 根本不会显示颜色 然后它们就出现了 但是谁喜欢相反的颜色呢 为什
  • 我应该从哪里安装 git:xcode-select --install 还是brew install git?

    我应该从哪里安装 git xcode select install or brew install git 你需要做xcode select install无论如何 如果你想做任何开发 然后你可以做 brew install git 它将安
  • 如果检测到更改中的特定短语,如何阻止 git commit?

    我注意到开发人员倾向于做的一些模式 例如使用以下代码提交 javascript 测试fdescribe or fit留在其中 这意味着只有一个测试 套件将运行 通常是在审查阶段发现的 但最好尽早发现这些小事情 想知道是否有一种方法可以配置
  • 当我所做的只是压缩提交时,为什么 git-rebase 会给我带来合并冲突?

    我们有一个包含 400 多个提交的 Git 存储库 其中前几十个提交需要大量的反复试验 我们希望通过将许多提交压缩为单个提交来清理这些提交 当然 git rebase 似乎是最佳选择 我的问题是它最终会产生合并冲突 而且这些冲突并不容易解决
  • Filebeat 日期字段映射为类型关键字

    Filebeat正在从文件中读取日志 其中日志的格式如下 logTimestamp 2019 11 29T16 39 43 027Z version 1 message Hello world logger name se lolotron
  • 致命错误:找不到“Fabric/Fabric.h”文件

    我正在使用 xcode 6 3 1 OSX 10 10 3 并且我已经在本地系统上成功配置了 crashlytics 它工作正常 并通过 Fabric 应用程序发布构建 但是当我将相同的代码库转移到 teamcity 时 它向我显示以下错误
  • 如何在 gitolite 中安装钩子

    我已阅读全部关于钩子的文档 https github com sitaramc gitolite blob pu doc 2 admin mkd using hooks similar https stackoverflow com que
  • Git 粒度——解决一行内的差异

    git 基于行的粒度或 diff 粒度是否可以增加到单词 字母分辨率 每行多条语句或使用 git 编写纯文本是值得的 根据评论重新阅读问题时 我想我明白了您最初的意思 所以我将给出一个真正的答案 与伊斯梅尔 巴达维的一行评论 https s
  • 直接从我的 github 存储库部署到 heroku

    如何直接从 GitHub 远程存储库将应用程序部署到 Heroku 是否存在这样的命令 heroku push https github com user repository git 有小费吗 技巧 你可以将服务放在 Github 和 H
  • 如何使用 GitLab 管道中的密钥通过 SSH 连接到目标服务器?

    当 GitLab 管道成功时 我想通过 SSH 使用公钥连接到服务器 正如我所看到的 我需要在 GitLab 端使用 ssh keygen 生成一个密钥并将其添加到我想要连接的服务器上 我可以在管道期间生成密钥 但由于公钥未添加到目标服务器
  • AngularJs:显示来自 git 或 Bower 的版本号

    我创建了一个 Angular 应用程序 我想在屏幕上显示应用程序的当前版本号 目前我已将其实现为常量 application constant constants VERSION 1 1 2 但这需要我在每个新版本上更新常量 我使用 Bow
  • 获得干净的 git 沙箱的最有效方法是什么?

    对于我的持续集成构建 我想确保我的 git 沙箱中没有存放任何杂散文件 并且没有任何文件被无意中更改 我知道关于git reset hard HEAD 这解决了部分问题 但我想我想做的是删除所有未跟踪和忽略的文件 我可以用蛮力的方式做到这一
  • 使用 git 同时维护不同版本的代码

    我有一个需要优化的代码 我想同时维护一组版本的代码 每个版本可以描述为一些功能 优化的组合 最终 我将决定哪个版本是最好的 我不想将这些版本合并为更少的版本 但是 我希望能够对 大 源文件进行 小 修改 这可能会跨版本转移 并且我希望这一修
  • 如何快速查看哪个 Git 分支是最新的?

    例如 如果 git 上有 4 个分支 如下所示 branch1 branch2 current branch branch3 newest commits here master oldest 我的问题是 如何从 git 命令行检查我当前的

随机推荐

  • [C#] 使用Spire.XLS 将excel转DataTable

  • 企业微信 40001 invalid credential问题解决

    获取access token报错 errcode 40001 errmsg invalid credential hint XXXXX from ip XXX XXX XXX XXX more info at https open work
  • 《JAVA 基础: 第一个JAVA应用程序》

    一 Java语言运行机制及运行过程 1 再次强调JAVA语言的特点 特点一 面向对象 两个基本概念 类 对象 三大特性 封装 继承 多态 特点二 健壮性 吸收了C C 语言的优点 但去掉了其影响程序健壮性的部分 如指针 内存的申请与释放等
  • 运用成员函数模板接受所有兼容类型——条款45

    所谓智能指针是 行为像指针 的对象 并提供指针没有的机能 例如条款13曾经提及std auto ptr和tr1 shared ptr如何能够被用来在正确时机自动删除heap based资源 STL容器的迭代器几乎总是智能指针 无疑地你不会奢
  • 卷积神经网络的复杂度分析

    在进行CNN的设计中 我们不仅要考虑模型的准确率 还需要考虑模型的实用性 现阶段大量的paper纯堆精度 缺没有深入思考模型以及算法的实用性 最近有一点感触很深 很多我们在做研究时认为默认的东西 在进行实际应用项目中 才发现这些先验数据是无
  • NVIDIA 安装 CUDA

    名词解释 CUDA 是一个架构 该架构使GPU能够解决复杂的计算问题 此实战使用电脑为联想Y9000P 显卡型号为 3060 在安装 CUDA 之前需要先打开 NVIDIA 控制面板 一 准备工作 如图我这个显卡需要安装 CUDA 11 7
  • Pci设备驱动1:pci设备驱动实例(realtek8168)

    Pci设备驱动1 pci设备驱动实例 realtek8168 2012 05 25 11 30 32 分类 LINUX Realtek8168网卡时pci接口的网卡 其驱动程序就是一个PCI设备的驱动程序实例 我们一起看看其流程 1 首先
  • JDK8到JDK17有哪些吸引人的新特性?

    作者 京东零售 刘一达 前言 2006年之后SUN公司决定将JDK进行开源 从此成立了OpenJDK组织进行JDK代码管理 任何人都可以获取该源码 并通过源码构建一个发行版发布到网络上 但是需要一个组织审核来确保构建的发行版是有效的 这个组
  • EfficientDet训练自己的训练集

    一 安装环境 install requirements pip install pycocotools numpy opencv python tqdm tensorboard tensorboardX pyyaml pip install
  • 五步教你如何注册一个公司网站

    在今天的数字化时代 每个公司都需要一个强大的线上存在感 注册一个公司网站是实现这一目标的第一步 但是 对于许多公司而言 这个过程可能有些困难 因此 在本文中 我将介绍一个五步计划 让您轻松注册一个成功的公司网站 步骤一 确定网站目标 在注册
  • oracle时间大小比较 格式

    首先给大家分享一个巨牛巨牛的人工智能教程 是我无意中发现的 教程不仅零基础 通俗易懂 而且非常风趣幽默 还时不时有内涵段子 像看小说一样 哈哈 我正在学习中 觉得太牛了 所以分享给大家 点这里可以跳转到教程 createtime gt to
  • android开源进度条,Android github开源进度条类框架SmoothProgressBar的使用

    前言 SmoothProgressBar是Github上的一个开源框架 牛人所著 只作翻译 Github项目主页 SmoothProgressBar https github com castorflex SmoothProgressBar
  • 80004005错误代码_关于访问共享时出现80004005错误

    访问网内某共享文件夹时出现的错误 报80004005错误代码 无法打开共享文件夹 但因为原先该共享访问并不存在障碍 因此应该不是权限的问题 到网上找了下 有以下一些说法与解决方法 1 开启windwos防火墙服务 2 设置宽带共享上网 打开
  • Docker部署ssh连接工具webssh2

    Docker部署ssh连接工具webssh2 一 检查系统版本 二 检查docker状态 三 下载webssh2镜像 四 创建webssh2容器 1 创建webssh2容器 2 查看webssh2状态 3 查看容器运行日志 五 访问webs
  • 简单易懂!详细讲解==与equals的区别(详讲equals源代码)

    与 equals 最本质的区别就在于 只是一个比较运算符 而equals却是一个方法 而只要是方法就可以重写 这就是 和equals最本质的区别 首先我们先来讲解 运算符 运算符可以对基本数据类型的值来进行判断 举例 int a 10 in
  • 关于保护继电器触点(灭弧)

    我用继电器驱动一个24V 60w电机 采用0 33uF 400V电容并联在触点上作为吸收和保护电容 用不了多久 就被击穿了 现在用的电容是0 1uF的X2电容 这种电容标称耐压是 275V 实际能承受2500V的冲击电压 后来的仿真和示波器
  • Prometheus-05 Prometheus的核心概念和架构

    Prometheus是一个开源的监控系统和时间序列数据库 被广泛应用于云原生环境中的监控和告警 本文将介绍Prometheus的核心概念和架构 帮助读者了解Prometheus的工作原理和基本组件 1 核心概念 Prometheus基于一些
  • python配置文件解析_【Python】configparser - 配置文件解析

    目录 一 介绍 ConfigParse 类实现一个基本配置文件解析器语言 提供了一个类似于Microsoft Windows INI 文件的结构 可以使用它来编写可由最终用户轻松定制的Python程序 注意 这个库不支持能够解析或写入在 W
  • java: 详解java中的集合框架

    一 Java集合框架概述 1 图解 集合可以看作是一种容器 用来存储对象信息 所有集合类都位于java util包下 但支持多线程的集合类位于java util concurrent包下 上图中淡绿色背景覆盖的是集合体系中常用的实现类 分别
  • GitHub项目管理详细教程/git教程【有图有代码】

    GitHub项目管理详细教程 git教程 有图有代码 一 Git 基本操作 二 Git 配置 1 配置个人的用户名称和电子邮件地址 2 查看配置信息 三 Git 工作区 暂存区和版本库 四 上传自己的项目到GitHub仓库 第一次 第二次