分布式版本控制工具--Git

2023-11-14

版本控制简介

集中式版本控制

集中式版本控制系统有一个中央服务器,每个人在工作时都需要从中央服务器中获得最新版本,在修改后提交到中央服务器,其他人再获取最新代码进行更改。这种方式的缺点是,我们必须有一个中央服务器,由于网络等原因无法连接到服务器或者服务器宕机时,我们就无法进行数据获取和提交;而且由于是互联网操作,所以网络环境也会影响到提交、下载速度。常用的集中式版本系统有CVS和SVN等,如下所示。
在这里插入图片描述

分布式版本控制

分布式版本控制(DVCS)是一种不需要中心服务器的管理文件版本的方法,但是通常也有一台充当“中央服务器”的计算机,但这个服务器仅仅用来方便交换我们的修改,没有它时我们同样干活,只是交换修改时不太方便。分布式的设计理念有助于减少对中心仓库的依赖,从而有效减少中心仓库的负载,改善代码提交的灵活性。常用的分布式版本控制为Git,如下所示。
在这里插入图片描述
Git分布式设计思想所带来的另一个好处是支持离线工作。对于CVS、SVN这种严重依赖网络的C/S工具而言,没有了网络或者VPN,代码的检入与检出操作就无法正常进行了。而使用Git,则即便在没有WiFi的飞机或者火车上,我们照样可以频繁地提交代码,只不过是先提交到本地仓库,等网络通时,再上传到远程的镜像仓库。
Git分布式版本控制系统没有中央服务器,每个站点上都有一个完整的版本库,每个站点却只是我们自己用来开发的计算机而已。我们可以在本地进行修改、提交,在需要进行代码合并时,只要将自己的版本库推送给合作伙伴即可,这样对方就可以看到更改。同样,对方也可以将自己的版本库推送给我们,这样我们就可以看到对方的修改了。由于每个人的计算机里都是一个完整的版本库,所以若不小心丢失数据,则只需要从其他地方复制一份就可以了。

Git安装

Debian、Ubuntu系统下的安装如下:

$apt-get install git

CentOS 和 Fedora 系统下的安装如下:

$yum update
$yum install git

Git的常用命令

Git的主要区域如下

  • 工作区:在计算机中能看到的目录,它持有实际文件。
  • 缓存区:临时保存我们的改动。
  • 版本库:工作区有一个隐藏目录.git,是Git的版本库。
  • 远程仓库:托管在因特网或其他网络中的项目版本库,可供多人分布式开发。
    在这里插入图片描述

Git配置项

显示当前的Git配置

$ git config --list

编辑Git配置文件

$ git config -e [--global]

设置用户信息

$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"

Git的设置文件为.gitconfig,它可以全局配置,也可以只为项目配置。

新建仓库

在当前目录新建一个Git仓库

$ git init

新建一个目录,将其初始化为Git仓库

$ git init [project-name]

克隆一个仓库

$ git clone [url]

增加、删除文件

添加指定文件到暂存区

$ git add [file1] [file2] ...

添加指定目录到暂存区,包括子目录

$ git add [dir]

添加当前目录的所以文件到缓存区

$ git add .

删除工作区文件,并且将这次删除放入缓存区

$ git rm [file1] [file2] ...

改名文件,并且将这个改名放入缓存区

$ git mv [file-original] [file-renamed]

提交文件

提交缓存区到仓库区

$ git commit -m [message]

提交缓存区的指定文件到仓库区

$ git commit [file1] [file2] ...  -m [message]

提交工作区自上次commit之后的变化,直接提交到仓库区

$ git commit -a

提交时显示所有diff的信息

$ git commit -v

使用一次新的commit,替代上一次提交
如果代码没有任何新变化,则用来改写上一次comit的提交信息

$ git commit --amend -m [message]

Git分支

列出所有本地分支

$ git branch

列出所有远程分支

$ git branch -r

列出所有本地和远程分支

$ git branch -a

新建一个分支,但依然停留在当前分支

$ git branch [branch-name]

新建一个分支,并切换到该分支

$ git checkout -b [branch]

新建一个分支,与指定的远程分支建立追踪关系

$ git branch --track [branch] [remoe-branch]

切换到指定分支,并更新工作区

$ git checkout [branch-name]

切换到上一个分支

$ git checkout -

建立追踪关系,在现有分支与指定的远程分支之间

$ git branch --set-upstream [branch] [remote-branch]

合并指定分支到当前分支

$ git merge [branch]

选择一个commit,合并在当前分支

$ git cherry-pick [commit]

删除分支

$ git branch -d [branch-name]

删除远程分支

$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

Git的标签

列出所有tag

$ git tag

在当前commit上新建一个tag

$ git tag [ tag ]

在指定commit上新建一个tag

$ git tag [ tag ] [ commit ]

删除本地tag

$ git tag -d [ tag ]

删除远程tag

$ git push origin :refs/tags[tagName]

查看tag信息

$ git show [ tag ]

提交指定tag

$ git push [ remote ] [ tag ]

提交所有tag

$ git push [ remote ] --tags

新建一个分支,指向某个tag

$ git checkout -b [ branch ] [ tag ]

查看信息

显示有变更的文件

$ git status

显示当前分支的版本历史

$ git log

根据关键词搜索提交历史

$ git log -S [keyword]

显示指定文件是什么人在什么时间修改过

$ git blame [file]

显示暂存区和工作区的差异

$ git diff

显示暂存区和上一个commit的差异

$ git diff --cached [file]

显示工作区与当前分支最新commit之间的差异

$ git diff HEAD

显示两次提交的元数据和内容变化

$ git diff [first-branch] ... [second-branch]

显示某次提交发生变化的文件

$ git show --name-only [commit]

远程同步

下载远程仓库的所有变动

$ git fetch [ remote ]

显示所有远程仓库

$ git remote -v

显示某个远程仓库的信息

$ git remote show [ remote ]

增加一个新的远程仓库并命名

$ git remote add [ shortname ] [ url ]

取回远程仓库的变化,并与本地分支合并

$ git pull [ remote ] [ branch ]

上传本地指定分支到远程仓库

$ git push [ remote ] [ branch]

强行推送当前分支到远程仓库,即使有冲突

$ git push [ remote ] --force

推送所有分支到远程仓库

$ git push [ remote ] -all

撤销

恢复暂存区的指定文件到工作区

$ git checkout [ file ]

恢复某个commit的指定文件到暂存区和工作区

$ git checkout [ commit ] [ file ]

恢复暂存区的所有文件到工作区

$ git checkout .

重置暂存区的指定文件,与上一次commit保持一致,但工作区不变

$ git reset [ file ]

重置暂存区与工作区,与上一次commit保持一致

$ git reset --hard

重置当前分支的HEAD为指定commit,同时重置暂存区,但工作区不变

$ git reset [ commit ]

重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致

$ git reset --hard [ commit ]

重置当前HEAD为指定commit,但保持暂存区和工作区不变

$ git reset --keep [ commit ]

新建一个commit,用来撤销指定commit
后者的所有变化都将被前者抵消,并且应用到当前分支

$ git revert [ commit ]

暂时将未提交的变化移除,稍后再移入

$ git stash
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分布式版本控制工具--Git 的相关文章

  • 在 github 上的 fork 中跟踪上游的最佳实践

    摘要 对于要维护一组本地更改的上游存储库 处理长期运行跟踪的最佳实践是什么 我想让 github 上的 fork 与上游保持同步 但仍然允许清晰跟踪 fork 特有的更改 对于本次讨论 假设upstream指向主项目存储库并且origin指
  • 有谁知道类似于 SVN Time-Lapse View 的 Git 工具 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 SVN Time Lapse View 是一个跨平台查看器 可以下载文件的所有修订版本 并允许您通过拖
  • `git ls-files -s` 输出中不同字段的含义是什么?

    在 Git 中 命令返回的典型结果行git ls files s好像 100755 be2c2e9b0966253096472d4b482c458bc892e493 0 gitignore 这些字段是什么意思 不用再犹豫了git ls fi
  • 丢失了我在 GIT 中的提交。你会不小心删除提交吗?

    我正在使用 git gui 但看不到我的分支 我知道我今天检查了一些东西 在完成提交并使用分支查看器验证后 我更改为较早的分支 我对之前的分支进行了更改 然后想返回到当前的分支 但我再也看不到它了 任何帮助都会很棒 回答你的问题 在大多数情
  • 如何制作 github PR 请求审查整个文件?

    有这个问题 https github com isaacs github issues 284这是相关的 允许对更改集之外的部分代码进行注释 我只是想知道是否有人有聪明的解决方法或流程来实现类似的 也许更简单的事情 因此 我有一组不同的文件
  • 第一次使用node.js - “ReferenceError:节点未定义”

    我刚刚安装了node js 我尝试编写应该检查版本的node v 但它不起作用 这是输出 gt node v ReferenceError node is not defined at repl 1 2 at REPLServer self
  • 致命:.git/info/refs 无效:这是一个 git 存储库吗?

    我有一个托管在 Assembla 上的 Git 存储库 我正在尝试执行以下操作 git push u origin master 我一遍又一遍地收到以下错误 fatal https url repo name git info refs n
  • git 别名中的 AWK 语句

    我正在尝试创建一个 git 别名来以特定格式打印日志中的所有拉取请求 但是 我在使用 AWK 删除双空格时遇到问题 这是使用以下命令的 git log 的输出 git log merges grep pull request pretty
  • Ansible bitbucket 克隆存储库配置 ssh 错误

    我之前发布过这个问题 但那里的答案不再有效 总之 当使用 Ansible 配置我的 vagrant box 时 在尝试使用 ssh 克隆我的 bitbucket 私有存储库时 我遇到了一个神秘的错误 该错误指出 权限被拒绝 公钥 然而 如果
  • 从 GitHub 上托管的 Spring Cloud Config Server 访问存储库的身份验证问题

    我在 GitHub 上的存储库中托管配置 如果我将回购公开 一切都好 但如果我将其设为私有 我将面临 org eclipse jgit errors TransportException https github com my user m
  • 无法从 Sourcetree 拉取 Git 远程存储库

    我生成了 ssh 密钥并配置了我的 git 和 SourceTree 我可以 git pull 并从 Git bash 执行其他操作 注意 我在 bashrc 中添加了以下内容以使其正常工作 eval ssh agent ssh add 然
  • 如何将工作树与提交进行比较?

    我在用着 git diff mycommit 用于比较我的工作树mycommit 但它似乎忽略当前索引中不存在的文件 您可以按如下方式重现它 git init echo A gt A txt git add git commit m A g
  • 如何在 macOS 上将 Git 升级到最新版本?

    我刚刚购买了一台装有 OS X Lion 的新 Mac 我在终端中检查了默认安装的 git 版本 我得到了答案 git version gt git version 1 7 5 4 我想将 git 升级到最新版本 1 7 8 3 因此我下载
  • 当 .gitattributes 中的 EOL 设置为 CRLF 时,Git diff 认为行结尾为 LF

    当我恢复对带有 Windows 行结尾的文件的更改并且 gitattributes 将 EOL 定义为 CRLF 时 git 认为行结尾已更改为 LR 即使十六进制编辑器显示 CRLF 仅当 gitattributes 定义 EOL 字符时
  • 如何使用 AWS Lambda 安装 Git?

    我在代码提交存储库中有代码 我正在编写一个 lambda 函数来为代码提交存储库的每个签入 事件 构建代码 我无法安装 git 因此无法克隆存储库 我该怎么办呢 正如其他人提到的 在 lambda 上安装 git 要么非常困难 要么完全不可
  • Android 存储库初始化失败

    我想我非常仔细地遵循该网站的说明 http source android com source downloading html http source android com source downloading html 但是当我尝试这
  • Git 在哪里存储标签?

    Git 在哪里存储标签 我执行 git tag v0 1 0 v0 10 0 v0 11 0 但目录 git refs tags是空的 Git 将这些标签存储在哪里 谢谢 它们也可以存储在 git packed refs
  • 如何让 Aptana Studio 记住 git ssh 密码

    我找不到任何有关如何获得 Aptana Studio 的内置 git 支持来记住执行推 拉操作的 ssh 密码的指南 信息 有人有什么想法吗 Aptana Studio 实际上是内置的 GIT 程序 它将在 Windows 上的 C Use
  • Composer 无法获取 github

    今天 我尝试通过运行来安装 Laravelcomposer create project laravel laravel 5 1 myproject prefer dist我收到此错误 Could not fetch https api g
  • Git:从 master 以外的分支克隆

    我正在尝试从 Github 的存储库中提取数据 但我不想克隆主分支 我想克隆其他一些分支 当我尝试时git clone

随机推荐

  • PHP源码1001PHP源码,某区块链养殖系统平台PHP源码无加密完整版,带充值接口+完整会员系统 可封装APP可二开...

    站长评测 对接的应该是码支付 源码没啥问题 有些功能还没开发完 适合二开 需要的朋友看看 1 只需用330元注册狗狗集市的一个游戏账户 就可以加入我们的大家庭了并可以获得戏猪的称号 第二天才会有收益 2 空闲之余呢您还可以去好友猪子圈里偷猪
  • 线性布局和相对布局的一些属性

    线性布局 LinearLayout orientation 属性是指定线性布局的排列方向 horizontal 水平 vertical 垂直 gravity属性是指定当前控件内容显示位置 left 左边 right 右边 top 上边 bo
  • SoundTouch实现音频变速变调

    音频基础 声音属性 响度 Loudness 音量 与声波的振幅有关 音调 Pitch 音调与声音的频率有关 声音频率越大时 音调就越高 否则就越低 音色 Quality 由物体结构特性所决定 A D转换 Analog to Digital
  • asp.net zero 8.2 学习-9-多租户设置,发送邮件配置

    学习在asp net zero系统中如何切换多租户及没有租户的设置 配置多租户 为实体添加TenantID 数据库迁移 修改DemoObjectAppService服务类的实体创建方法 配置邮件发送 创建租户 并添加数据测试 切换为无租户系
  • LeetCode 1034:边界着色

    问题描述 给你一个大小为 m x n 的整数矩阵 grid 表示一个网格 另给你三个整数 row col 和 color 网格中的每个值表示该位置处的网格块的颜色 将给定单元格 row col 的联通区域的边界着色成color 思路 DFS
  • 基于springboot+vue的学科竞赛项目管理系统【附源码】

    晚安独角兽 hello你好我是独角兽 很高兴你能来阅读 昵称是希望自己能不断精进 向着优秀程序员前行 博客来源于项目以及编程中遇到的问题总结 偶尔会有读书分享 我会陆续更新Java前端 后台 数据库 项目案例等相关知识点总结 感谢你的阅读和
  • web安全--文件包含实例操作

    文件包含分为LFI 本地文件包含 和RFL 远程文件包含 两种 文件包含的前提是服务器allow url openllow url include LFI 或者allow url open RFI 在owasp环境中可以在 etc php5
  • 软件测试——自动化测试框架有哪些?

    目录 前言 一 Robot Framework 二 Pytest 三 UnitTest PyUnit 四 Behave 五 Lettuce 结语 前言 自动化测试常用的Python框架有哪些 常用的框架有Robot Framework Py
  • 命令行进入指定目录_命令行的简单介绍

    作为一名程序员 命令行是最基础的东西 不要以为作为前端就可以不用学习命令行了 前端首先是程序员然后再是前端 所以命令行是必须要懂的 接下来我们简单的来介绍几个最常用的命令吧 在介绍命令前 请先安装好Git bash等命令行工具 1 基础单词
  • QT5.15以及QT VS TOOL安装教程(精简版)

    前言 大作业需要做一个图形化的计算器 不给用Java 又只学过C 所以投奔QT的怀抱 网上有些教程已经没法用了 还不更新 这是我刚摸出来的方法 2023 Apr 实测可用捏 欢迎补充指正 QT5 15下载安装教程 点击这个链接 Index
  • IOC/DI/AOP回顾

    IOC BeanFactory ClassPathXmlApplicationContext AbstractApplicationContext 通过调 refrech 方法 去实现ioc容器的初始化 然后执行三个步骤 1 定位 主要执行
  • shell 脚本中总是会忘记的一些语法总结!!!!

    一 cmd gt file 2 gt 1 与 cmd 2 gt 1 gt file 区别 1 cmd gt file 2 gt 1 的意思是标准输出和标准错误输出都定向到 file 等价于 cmd gt file 或 cmd gt file
  • 【ML特征工程】第 6 章 :降维:用 PCA 压缩数据薄饼

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • 请确保您已登录客户机操作系统。在客户机中装载虚拟CD驱动器,启动终端,使用tar解压...

    参考文档 官网指导文档 linux公社参考文档 转载于 https www cnblogs com bigorang p 10839217 html
  • QT创建计算器 [数据库实验课]

    QT创建计算器 数据库实验课 前言 qt我没有系统的学习过 所以对很多细节都很不清楚 今天写这个计算器 遇到了好多问题 问题 上课的时候老师做c 示例的时候 老师是在每一个0 9的按钮里 都双击添加函数的 然后我就想到当时写Java计算器的
  • 第二章:预备知识整理 ——2.1数据操作

    数据操作的课后练习题 2 1 8 练习 运行本节中的代码 将本节中的条件语句 X Y 更改为 X lt Y 或 X gt Y 然后看看你可以得到什么样的张量 用其他形状 例如三维张量 替换广播机制中按元素操作的两个张量 结果是否与预期相同
  • 解决eclipse maven 项目重新下载包这个问题

    本文转载至 http www cnblogs com huzi007 p 5602063 html 问题 eclipse项目使用maven下载依赖包 但是有时候断网什么来着就不会自动下载了 挺蛋疼了 所以 需要我们重新更新项目下载呢 首先是
  • Android PowerSupply (四)ChargeIC SGM41511 IC driver调试

    目录 Android PowerSupply 一 总概 Android PowerSupply 二 power supply core Android PowerSupply 三 power supply sys Android Power
  • IDEA 自动生成 serialVersionUID 的设置

    1 没有设置之前 选中对应的类名 然后按 alt enter 快捷键 的情况如下所示 2 设置自动生成 serialVersionUID 的方式如下图所示 关键点已逐个标识 3 设置之后 选中对应的类名 然后按 alt enter 快捷键
  • 分布式版本控制工具--Git

    分布式版本控制 Git的灵魂使用 版本控制简介 集中式版本控制 分布式版本控制 Git安装 Git的常用命令 Git配置项 新建仓库 增加 删除文件 提交文件 Git分支 Git的标签 查看信息 远程同步 撤销 版本控制简介 集中式版本控制