文章目录

  • Git
    • 一、版本控制
    • 二、Windows安装Git
      • 1. Git 安装
      • 2. Git 一次性配置
    • 三、理解Git文件的三种状态与工作模式
    • 四、创建版本库并提交文件
      • 1. 初始化git
      • 2. git 加入暂存区
      • 3. git 提交
      • 4. 查看 git 操作日志
    • 五、时光穿梭机
      • 1. 修改文件与提交
        • 不放入暂存区会怎样?
        • 已经放入暂存区的文件怎样撤销
      • 2. 版本回退
        • 回到过去版本
        • 去到未来版本
        • 如果不小心 clear 或则关掉了窗口,我找不到回到未来的路咋办
      • 3. 文件删除
        • 如果是工作区误删怎么找回呢?
        • 删除仓库中的文件
    • 六、远程仓库
      • 1. 克隆远程项目到本地
      • 2. 将本地库推送到远端
    • 七、Git 分支操作
      • 1. 在本地创建分支
      • 2. 分支的Push和Pull操作
      • 3. 分支操作冲突出现与解决
        • 1.本地分支操作冲突
        • 2. 多人协同操作冲突
    • 八、标签(releases)管理

Git

当下较为流行的分布式版本控制系统

一、版本控制

功能类似备份,方便在修改后查看早期版本

二、Windows安装Git

1. Git 安装

点这里下载



然后安装一路 Next 即可

安装完成后,桌面鼠标右击

选择Git Bash Here

输入

git --version

查看当前下载版本

如果显示出版本号则安装成功

2. Git 一次性配置

在使用Git工作之前,我们需要做一个一次性的配置。方便后续Git能跟踪到谁做了修改,我们需要设置对应的用户名和邮箱地址。

git config --global user.name "your_username"
git config --global user.email your_email@qq.com
git config --list 查看所有配置

配置前输入

git config --list

会发现没有用户名邮箱这两项
需要自己配置

这就配置好了,接下来输入

git config --list

查看,发现已经配置好了

三、理解Git文件的三种状态与工作模式

  1. Git 的三种工作状态

1) 已提交(committed)
表示数据已经安全的保存在本地数据库中。
2) 已修改(modified)
表示修改了文件,但是还没保存到数据库中。
3) 已暂存(staged)
表示对一个已修改的文件的当前版本做了标记,使之包含在下次提交的快照(可以理解为将文件复制了一下)中。

  1. 三个工作区域

1) 工作区
在电脑里能看到的目录,比如自己创建的本地项目目录
2) 暂存区
Git的版本库里存了很多东西,其中最重要的就是称为 stage (或者叫index)的暂存区,还有Git自动创建的第一个分支 master ,以及指向 master 的一个指针叫 HEAD
3) Git仓库
工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

  1. 对以上概念有了一个粗略的了解,我们来看看 Git 的工作流程描述

1) 把 Git 仓库中的文件在工作区进行修改
2) 对修改后的文件进行快照,添加到暂存区
3) 将暂存区的文件快照永久转存到 Git 仓库中

四、创建版本库并提交文件

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

下面通过一个例子熟悉 Git 对于文件的基本操作:

1. 初始化git

打开一个文件夹,右键进入 GIT BUSH HERE

初始化git本地仓库
git init
创建一个文本

文本中任意添加内容后保存

2. git 加入暂存区

输入

git add +文件地址

把文件添加到暂存区

然后输入

git status

查看是否添加成功

On branch master (在主分支上)No commits yet (还没有提交)Changes to be committed: (可以提交的文件)(将 xxx 文件从缓存区清除)new file: 当前在缓存区的文件

当然你也可以尝试以下清除

清除之后文件显示为红色,也就是不在缓存区,无法提交
需要重新添加到缓存区

经过上述操作我们已经将 git_1.txt 添加到缓存区了

3. git 提交

git commit -m '这里是属性备注,方便查看此次做了什么修改'

[master (root-commit) 7e8788f(存储地址)]  属性备注
一个文件发生变更, 插入了一个文件
创建了git_1.txt

4. 查看 git 操作日志

git log

输入

exit

退出界面

五、时光穿梭机

多人的项目开发环境下,使用 Git 版本控制器工具对项目进行管理时,通常会对不同版本的文件进行查看,对历史版本和未来版本进行切换操作。

1. 修改文件与提交

重新在初始化仓库所在的文件夹中打开 Bush
输入

git status

会发现之前暂存区的文件不在了

小事,再放进去就行
先修改文档

保存后关闭

然后放入暂存区并提交


输入

git log

查看日志

分别记录了

提交版本的唯一标识
作者
提交日期
属性备注

不放入暂存区会怎样?

提醒大家提交文件前先放入暂存区

先对文件进行第三次修改并保存

直接 commit 后会是什么样?

BUSH中输入

git diff HEAD -- git_1.txt

来查看文件的修改状态


a后面是第一次修改的文件
b后面是第二次修改的文件


---a是修改前
+++b是修改后



第一行没有发生变更

该命令成功变更

该行没有只在本地修改,没有在仓库变更

已经放入暂存区的文件怎样撤销

新建一个 test.txt 并加入暂存区

查看

加入暂存区,并查看是否添加成功

这时候没有女朋友的我生气了,我不想让 test.txt 进入暂存区了,我要让它滚出去
输入

git reset HEAD

再查看发现它出去了,单身狗舒服了

2. 版本回退

我们现在可以把没用的test.txt 删除
将第三次修改正确提交

添加第四次和第五次修改



然后我们

clear

清除一下

查看日志

是不是感觉很不直观

git log -5 --pretty=ontline

(打印五行,每一条的第一行)

舒服了

回到过去版本

git reset --hard HEAD^

一个 ^ 表示回退到当前的上一次修改,这时候你开始举一反三了,那 ^^ 是不是往前回退两次, ^^^是回退到三次修改前。
我去!你真是个小机灵鬼,确实如此


我从第五次修改穿越到了第四次修改
打开文档发现,文档果然回到了第四次修改的样子

也可以在命令行中用

cat git_1.txt

查看当前文档内容

但是如果我先返回到 5201314 次修改之前怎么办?
打 5201314 次 ^吗?
显然不行,于是就有了下面这个新的命令

git reset --hard HEAD~k

表示从当前往前回退 k 个版本

假如我从第二个版本往前回退

去到未来版本

怎么回到现在呢?

还记不记得这个清晰的显示

我们知道每个版本前面这个黄色的编码都是独一无二的,
就像你的学号对应着你,它用于守护着自己的版本
于是我们利用这个编码来跳转

git reset --hard 编码的前几位(一般用五位,不过几位都行,不够自己加)


好耶!我们又回来了

如果不小心 clear 或则关掉了窗口,我找不到回到未来的路咋办

比如我们先回到过去第三个版本

然后我们

clear

屏幕上啥都没了

查看也只能看到前三次的
咋办啊?
姑娘别哭,继续往下看
输入

git reflog

就可以查看到我们之前的做过的一些操作命令,
前面黄色的编码就是我们之前分支的应用位置

于是我们查看后去到第五次修改的位置
git reset --hard b0e94

嘿嘿,我们又回来了。

3. 文件删除

首先我们新建一个文本文件

将文件从工作区提交到仓库内部

查看一下仓库里的文件
git ls-files

然后将在工作区将文件删除(但是仓库中仍然保留),并查看

我们发现已经检测到工作区的文件被删除

但是它还在仓库里

如果是工作区误删怎么找回呢?

git checkout -- wushiyi.txt

相当于从仓库拷贝过来


可以看到文件又回来了,打开发现内容也在

删除仓库中的文件

输入

git rm wushiyi.txt

发现已经在工作区被删除了

查看发现,在仓库中也被删除了

这下真的找不回来了

六、远程仓库

多人开发,有一个远程仓库,我们从远程仓库把项目下载到本地(同时下载了所有的修改日志),在本地开发,开发完后提交到本地仓库,还需要上传到远端仓库才能和其他人的代码一起发挥作用。

最著名的两个开源仓库
Github (https://github.com/)
码云(https://gitee.com/)
企业可能会有自己搭建的仓库

1. 克隆远程项目到本地

打开 github 注册一个账号并登录
下面我们开始下载一个项目到本地

搜索java8
点进第一个项目,并点击 Code

我们可以看到两种下载方式

  1. 复制到命令行打开
  2. 直接本地下载为 ZIP

我们显然用命令行操作

新建一个文件夹JAVA8

在其内部打开 BASH

git clone https://github.com/winterbe/java8-tutorial.git


我们已经将项目克隆到了本地

2. 将本地库推送到远端

首先新建一个仓库
点右上角加号
添加仓库信息(下面啥也别选)


图像中的命令,前几行在本地的操作我们已经进行过了,
最后两行分别代表

将文件的远端仓库设置为 刚刚新建的仓库
将本地仓库的文件推送到远端

在之前的文件夹,打开BASH,将…or push an existing repository from the command line 一栏中的代码复制进去

然后回弹出密码及用户名的输入按要求操作即可

接下来更新界面就能在github上看到
之后可以直接推送远端,不用再次建立连接

还可以利用 HTTP/SSH 加密登录,需要申请密钥和公钥,这里我就不演示了
(但是它更高效,且安全)

七、Git 分支操作

多人协作时,当项目已经投入使用,我们不能直接在 master 主干上修改,不然如果产生新的 BUG 会使用户直接无法使用,于是我们一般从主干拉出一个分支进行修改,没问题之后再将其合并入主干。

git checkout branch  切换到指定分支
git checkout -b new_branch  新建分支并切换到新建分支
git branch -d branch    删除指定分支
git branch  查看所有分支,并且`*`标记当前所在的分支
git merge branch    合并分支
git branch -m | -M oldbranch newbranch  重命名分支,如果newbranch名字分支已经存在,则需要使用 -M 强制重命名,否则,使用 -m 进行重命名

1. 在本地创建分支

新建分支,在分支上添加部分工作区
开发完分治后合并到主干上,删除分支

2. 分支的Push和Pull操作

为了方便与其他人多人协同操作,就有了向远程仓库推送和拉取操作

git branch -a    查看本地分支
git push origin branch_name 推送本地分支到远程
git push origin :remote_branch  删除远程分支(本地分支还在保留)
git checkout -b local_branch origin/remote_branch   拉去远程指定分支并在本地创建分支

3. 分支操作冲突出现与解决

1.本地分支操作冲突

在分支和 master 的相同位置进行了不同修改,合并时会出现冲突
解决冲突
1) 保留 master
2) 保留 分支
3) 合并二者关键信息到一个文件中

git log --graph --pretty=oneline    方便查看冲突

2. 多人协同操作冲突

两个人拉取了同一版本的文件进行修改,A先修改后上传远端,B修改了相同位置后上传,发生冲突
解决冲突最简单的方法是拉取最新的文件,在此基础上修改

八、标签(releases)管理

git tag tag_name 新建标签 默认为 HEAD
git tag -a tag_name -m 'xxx'  添加标签并指定标签信息
git tag 查看所有标签
git tag -d tag_name 删除一个本地标签
git push origin tag_name    推送本地标签到远程
git push origin --tags  推送全部未推送过的本地标签到远程
git push origin :refs/tags/tag_name 删除一个远程标签

对设置标签时所有的文件做标记,下载 release 可以看到修改时的所有文件
相当于更新产品时,推送一个新的版本

手把手教你熟悉Git操作相关推荐

  1. 手把手教你入门Git --- Git使用指南(Linux)

    手把手教你入门Git - Git使用指南(Linux) 系统:ubuntu 18.04 LTS 本文所有git命令操作实验具有连续性,git小白完全可以从头到尾跟着本文所有给出的命令走一遍,就会对gi ...

  2. 手把手教你使用Git

    <div class="container"> <div class="row"> <div id="readercon ...

  3. 手把手教你上手Git并上传项目到GitHub官网

    手把手教你上手Git并上传项目到GitHub官网 Learning Git Branch: 学习 Git 最好的游戏及教程 https://learngitbranching.js.org 这个就是那 ...

  4. 处理效应模型stata实例_【更新通知】手把手教你Stata软件操作与案例分析更新,速来!...

    继3大政策效应评价方法.面板微观计量模型.空间计量模型.应用面板数据模型四大主题套餐后,手把手教你Stata系列课程推出多期DID.平行趋势检验系列专题. 该专题包含多期DID及平行趋势检验:双重差分 ...

  5. 手把手教你把 Git 子模块更新到主项目

    本文以 skywalking-rocketbot-ui子模块合并到 skywalking 为例,手把手教你如何把 Git 子模块更新到主项目中去. 首先,把fork的skywalking项目克隆到本地 ...

  6. gitbash登录码云报错_手把手教你入门git仓库和关联码云

    gitHub(国外)和Gitee(码云,国内的) 环境配置教程 注册码云账号和git安装教程的具体指导(生成密钥,环境配置,绑定邮箱用户) 百度网盘下载链接(.pdf文件):https://pan.b ...

  7. 手把手教你用Git备份保存论文和代码等重要数据到云端

    前言 毕业季到了,各位小伙伴想必也在奋笔疾书马不停蹄写毕业论文啦! 不过写论文的时候,小伙伴们可能遇到的一个问题就是:论文放在哪里才安全?去年勒索病毒的教训我们可还没忘记呢! 放在电脑硬盘上吧,这破电 ...

  8. 手把手教你搭建 Git 服务器

    https://gitbook.cn/books/5e81adf58d6af944d1f26356/index.html 1. 服务器端安装 Git 切换至 root 账户: su root 看一下服 ...

  9. 推荐!手把手教你使用Git

    2019独角兽企业重金招聘Python工程师标准>>> 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制 ...

最新文章

  1. leetcode 477. Total Hamming Distance | 477. 汉明距离总和
  2. java兵乓球队问题_Java两个乒乓球队比赛名单问题(判断素数)
  3. 浅析RTB和RTA(三)
  4. Firefox 100% 支持 ECMAScript 2016
  5. 使用 Autofill 插件快速提交BUG
  6. 自然语言处理中的Attention Model原理介绍
  7. Eclipse代码自动补全设置
  8. 如何在Linux启动jar 包
  9. Linux多线程编程-线程间参数传递
  10. PE下安装win XP 64位实战
  11. AUTOCAD——线宽设置
  12. 计算机组成原理4位快速加法器
  13. Vue播放m3u8视频格式的视频监控(适合移动端和pc端),用了Video.js,以及多视频列表循环播放代码,已测试,可播放
  14. matlab 三维立方体,使用matlab函数构建三维立方体的几种方法
  15. 架构设计实践五部曲(五):技术架构的战略和战术原则
  16. 7-62 贴“福”字
  17. 后OA时代:流程再造
  18. Linux-Shell脚本练习
  19. 梯度下降算法_梯度下降算法的工作原理
  20. 寒假每日一题——贝茜的报复

热门文章

  1. 每日一题(进制转换)
  2. 第十二篇:形式语言理论与有限状态自动机
  3. 链表问题11——两个单链表相交的系列问题(四):总结
  4. History(历史)命令用法
  5. 如何在同一台电脑开启多个tomcat服务器
  6. 【更新】比较智能的爬取姓名
  7. nodeJs-autoMerge
  8. Solr Schema.xml分析
  9. 【数据安全案例】北京破获贩卖个人信息案 涉及上千万条公民信息
  10. Linux 查看文件大小