IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> git 深入浅出 -> 正文阅读

[开发工具]git 深入浅出

1. Git是什么

Git是目前世界上最先进的分布式版本控制系统(没有之一)。版本控制系统就是可以记录每次文件改动的系统。版本控制系统目前分为两种,一种是集中式版本控制系统(cvs,svn),一种是分布式版本控制系统(git)。集中式版本管理系统的原理是将版本库存放到一台中央服务器上,到了要干活的时候,再从中央服务器上去取得最新的版本,干完活后,再将最新的版本推送给中央服务器。集中式版本控制系统最大的毛病是要联网才能工作,而分布式版本管理系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,多个人协作只要互相推送就好了,在实际使用分布式版本控制系统时,受网络影响,还是需要一台充当“中央服务器的电脑”,但这个服务器的作用仅仅是用来方便交换大家的修改,没有他大家也一样的干活,只是交换修改不方便而已。Git还有极其强大的分支管理,后面再说。

2.如何在各个系统上安装Git

1.1 在Linux上安装Git

root@localhost$: git //尝试输入git,大部分Linux系统会友好的告诉你Git有没有安装以及怎么安装Git 

也可通过源码安装,先从Git官网下载源代码,然后解压,依次输入:
./config, make, make install

1.2 在MacOS上安装Git

两种方法:

  • 第一种是安装homebrew,具体参考文档
  • 第二种是直接从 AppStore 安装 Xcode,Xcode 集成了 Git,不
    过默认没有安装,你需要运行 Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。

1.3 在windows上安装Git

下载msysgit,按默认选项安装即可。
安装完成后,在开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明 Git
安装成功!
安装完成后,还需要最后一步设置,在命令行输入:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

3. 创建Git版本库

3.1 什么叫版本库

版本库又名仓库,英文名 repository,你可以简单理解成一个目录,这个目录 里面的所有文件都可以被 Git
管理起来,每个文件的修改、删除,Git 都能跟踪,以便任何时刻都可以 追踪历史,或者在将来某个时刻可以“还原”。

3.2 创建Git版本库

  1. 选择一个合适的地方,创建一个空目录
  2. 通过git init命令把这个目录变为Git可以管理的仓库。

创建成功后会有一个隐藏的.git目录

3.3 将文件添加到版本库

  1. git add xxx.txt(单个文件)、git add .(所有文件)
  2. git commit -m "注释内容"

第一步,把文件添加到仓库,第二步,把文件提交到仓库。commit可以一次提交很多文件。add可以多次添加不同文件。

4. Git版本回退及修改删除

4.1 查看当前状态

git status 查看当前仓库状态
git diff 查看修改内容

4.2 版本回退

git log 显示从最近到最远的提交日志
git reset --hard HEAD^ 版本回退到上一个版本
git reset --hard HEAD^ 回退到上上一个版本
git reset --hard commit id 回退到指定版本
git reflog 记录你的每一次命令

版本号没必要写全,Git会自动寻找,Git 的版本回退速度非常快,因为 Git 在内部有个指向当前版本的 HEAD 指针,当你回退版本的时候,Git 仅仅是把 HEAD 从指向 现在版本 改为指向 历史版本。

  • HEAD 指向的版本就是当前版本,因此,Git 允许我们在版本的历史之间穿梭,使用命令 g it reset --hard commit_id
  • 穿梭前,用 git log 可以查看提交历史,以便确定要回退到哪个版本。
  • 要重返未来,用 git reflog 查看命令历史,以便确定要回到未来的哪个版本。

4.3 工作区和暂存区

  • 工作区

就是你电脑里能看到的目录。

  • 版本库

工作区有一个隐藏目录.git,这个不算工作区,而是 Git 的版本库。Git 的版本库里存了很多东西,其中最重要的就是称为 stage(或者叫 index)的暂存区,还有 Git 为我们自动创建的第一个分支master,以及指向 master 的一个指针叫 HEAD。

在这里插入图片描述
结合前面把文件往Git版本库添加的时候,是分两步执行的:

  1. git add 实际上是将文件添加到暂存区。
  2. git commit 实际上是将暂存区的所有内容添加到当前分支。

4.4 删除文件

git checkout -- file 丢弃工作区的修改,回到最近一次 git commit 或 git add 时的状态。

git checkout -- file 命令中的–很重要,没有–,就变成了“创建一个新分支”的命令,我们在后
面的分支管理中会再次遇到 git checkout 命令。

  • 场景一 :当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令 git checkout - file
  • 场景二:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,
    第一步用命令 git reset HEAD file,就回到了场景 1,第二步按场景 1 操作。
  • 场景三:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前
    提是没有推送到远程库。

5. Git远程仓库

假设你已经有了一个Gitee账号
参考Gitee提交提交第一行代码的示例:https://gitee.com/help/articles/4122

6. Git分支管理

6.1 创建与合并分支

在git里主分支叫master,HEAD是指向master的,一开始的时候,master 分支是一条线,Git 用 master 指向最新的提交,再用 HEAD 指向 master,就能确定当前分支,以及当前分支的提交点。

在这里插入图片描述

每次提交,master 分支都会向前移动一步,这样,随着你不断提交,master 分支的线也越来越
长。当我们创建新的分支,例如 dev 时,Git 新建了一个指针叫 dev,指向 master 相同的提交,再把 HEAD 指向 dev,就表示当前分支在 dev 上。

在这里插入图片描述

合并分支其实就是将master指向dev的当前提交,从而完成合并。

在这里插入图片描述

合并完之后甚至可以删除dev分支,其实就是删除dev指针,从始至终,变得只有git的指针所指向的提交,所以git修改,删除,添加分支都非常快。

git checkout -b dev 创建dev分支并切换当前分支为dev
git checkout dev 切换当前分支为dev
git branch dev 创建dev分支
git branch 查看当前分支
git merge dev 用于合并指定分支到当前分支
git branch -d dev 删除dev分支

6.2 解决冲突

当 Git 无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
git log --graph 命令可以看到分支合并图。

6.3 分支管理策略

通常,合并分支时,如果可能,Git 会用 Fast forward 模式,但这种模式下,删除分支后,会丢掉
分支信息,如果要强制禁用 Fast forward 模式,Git 就会在 merge 时生成一个新的 commit,这样,从分支历史上就可以看出分支信息。

git merge --no-ff -m "merge with no-ff" dev 提交禁用 Fast forward策略

6.4 Bug分支

修复 bug 时,我们会通过创建新的 bug 分支进行修复,然后合并,最后删除。当手头工作没有完成时,先把工作现场 git stash 一下,然后去修复 bug,修复后,再 git stash pop,回到工作现场。

git stash 隐藏当前工作区工作
git stash list 查看隐藏工作区列表
git stash apply 恢复隐藏工作区工作但不删除隐藏工作区内容
git stash pop 恢复隐藏工作区工作同时删除内容
git remote -v 查看远程库消息

6.5 推送分支

git push origin master 推送分支到远程库上的master分支

并不是每个分支都要往远程分支上推送的:

  • master分支是主分支,必须推送。
  • dev分支是开发分支,必须远程推送。
  • bug分支只用于在本地解决bug使用,没必要推送远程,除非领导想知道你解决了几个bug。
    总之,在git中,分支完全可以本地藏着自己玩,是否推送,视你的心情而定!

6.6 抓取分支

  • 从本地推送分支,使用 git push origin branch-name,如果推送失败,先用 git pull
    取远程的新提交。
  • 在本地创建和远程分支对应的分支,使用 git checkout -b branch-name origin/branch-n ame,本地和远程分支的名称最好一致。
  • 建立本地分支和远程分支的关联,使用 git branch --set-upstream branch-name origin/ branch-name
  • 从远程抓取分支,使用 git pull,如果有冲突,要先处理冲突。

6.7 创建标签

Git 的标签虽然是版本库的快照,但其实它就是指向某个 commit 的指针(跟分支很像对不对?但
是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。

git tag v1.0 创建一个v1.0的标签
git tag 查看所有标签

默认标签是打在最新提交的 commit 上的。
如果忘记打标签了,怎么办?
方法是找到历史提交的 commit id,然后打上就可以了

git tag v0.9 6224937在6224937的提交上添加标签
git show <tagname> 查看标签信息
git tag -a v0.1 -m "version 0.1 released" 3628164 创建带有说明的标签,用-a 指定标签名,-m 指定说明文字
git tag -s v0.2 -m "signed version 0.2 released" fec145a通过-s 用私钥签名一个标签

如果标签打错了,怎么办?
git tag -d v0.1 删除本地某个标签

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删
除。

git push origin <tagname> 推送某个标签到远程
git push origin --tags 一次性推送全部尚未推送到远程的本地标签

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除
git tag -d v0.9
然后,从远程删除。删除命令也是 push,但是格式如下
git push origin :refs/tags/<tagname> 删除一个远程标签

7. 自定义Git

7.1 配置别名

git config --global alias.st status 告诉 Git,以后 st 就表示 status:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Crese t -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" 查看提交日志的自定义配置。

7.2 忽略特殊文件

在 Git 工作区的根目录下创建一个特殊的.gitignore 文件,然后把要忽略的文件名填进去,Git 就会自动忽略这些文件。

忽略文件的原则是:

  • 忽略操作系统自动生成的文件,比如缩略图等;
  • 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动
    生成的,那自动生成的文件就没必要放进版本库,比如 Java 编译产生的.class 文件;
  • 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:44:21  更:2022-07-17 16:47:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/29 6:44:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码