GIT运维-版本管理

Git实现版本管理

什么是Git?

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆,在本地机器上拷贝一个完整的Git仓库。

Git的意义

就像每个程序员都会遇到的问题,在编写代码时,常常需要不断地进行修改,但是你一不小心修改错了,那怎么才能找到以前的版本呢。git就起到了一个良好的作用。它通过建立一个版本库,从而保存每个你发行过的版本,并能通过特定的命令行对版本进行回溯,也能通过日志访问,仔细看到每一个修改的详细日志。

怎么使用

1.下载git软件,注意安装路径最好不要有中文。

Git – 安装 Git (git-scm.com)

具体安装详解看官网内容。

下载完成后,在桌面即可通过右键打开git bash(windows版本)

2.绑定个人信息

修改命令:

git config --global user.name "用户名"
git config --global user.email "邮箱"

将自己常用邮箱和用户名填入,在git bash运行。

3.创建本地git项目仓库

第一种:git clone 别人的仓库到你的本地文件系统。

第二种:新建立自己的项目文件夹到你的文件系统。

两种选其一即可,然后进入对应的文件目录,通过git init命令将目录变成Git仓库

git init

此时一个普通目录就变成了了Git仓库,可以发现目录下多了一个.git文件夹,这个目录是Git来跟踪管理版本库的。(内部的内容别动),他一般是自动隐藏的

4.添加文件到版本库

现在向test目录或其子目录下创建一个 readme.txt 文件,因为这是一个Git仓库,放到其他地方Git找不到这个文件。内容如下:

git i4 great!

第一步,用命令git add把文件添加到Git仓库:

git add readme.txt

此时,文件就被提交到git的暂存区。

第二步,用命令git commit把文件提交到Git仓库(-m后面输入的是本次提交的说明)

git commit -m "wrote a readme file"

执行git commit命令后会告诉你,1 file changed:1个文件被改动(新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容)。

为什么Git添加文件需要addcommit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files."

5.版本管理

现在已经成功添加并提交了一个 readme.txt 文件,接着继续修改 readme.txt,修改内容如下:

fuck off

运行git status命令查看状态:

git status

git status命令可以查看仓库当前的状态,通过输出得知 readme.txt 被修改过了,但还没有准备提交的修改。

假如你休假两周之后继续上班,但已经记不清上次怎么修改的 readme.txt,这时可以用git diff这个命令看看:

git diff

git diff即查看difference,显示的格式是Unix通用的diff格式,通过输出就知道了上一次对 readme.txt 做了什么修改,现在对文件进行提交。

git add readme.txt

执行git commit之前,再查看一下当前仓库的状态

git status告诉我们,将要被提交的修改包括 readme.txt,下一步提交

git commit -m "change"

提交后,再用git status命令查看仓库的当前状态:

git status
On branch master
nothing to commit, working tree clean

Git告诉我们当前没有需要提交的修改,工作目录是干净的。

6.版本回退

现在继续修改 readme.txt,内容如下:

life is a fucking movie

然后提交

git add ....
git commit....

可以把Git中的commit理解成“快照”,每当觉得文件修改到一定程度的时候,就可以保存一个快照,当你把文件改乱或者误删,还可以从最近的一个commit恢复。

在实际工作中,我们怎么知道 readme.txt 文件一共有几个版本被提交到Git仓库里了呢?这时就用到git log命令了。

git log

git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是last vision,上一次是change,最早的一次是wrote a readme file`。

如果嫌输出信息太多,可以加上--pretty=oneline参数:

git log --pretty=oneline

上面一大串类似1094adb...的是commit id(版本号),它是一个SHA1计算出来的一个非常大的数字,因为Git是分布式的版本控制系统,在工作中可能多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号就会发生冲突。

那么如何把 readme.txt 回退到上一个版本,即cchange版本呢?

首先,Git必须知道当前版本是哪个版本,在Git中用HEAD表示当前版本,也就是最新的提交1094adb...,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

要把当前版本last vision回退到上一个版本change,就可以使用git reset`命令:

git reset --hard HEAD^

查看 readme.txt 的内容可以发现已经回到上一个版本了

cat readme.txt

git log再看看现在版本库的状态:

会发现最新的那个版本last vision不见了,好比你从21世纪坐时光穿梭机来到了19世纪,想再回去已经回不去了,怎么办?

其实只要上面的命令行窗口还没有被关掉,你就可以找到last visioncommit id,然后回到未来的版本:

git reset --hard ec916

版本号写前几位就可以,Git会自动去找(不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个)

再次查看 readme.txt 的内容,发现果然回来了。

cat readme.txt

假如你回退到了某个版本,关掉了电脑,第二天想恢复到新版本但找不到新版本的commit id怎么办?

Git提供了一个命令git reflog用来记录你的每一次命令:

git reflog

可以看到last vision的commit id是ec916,现在又可以回到新版本了。

Git的版本回退速度之所以快,是因为Git在内部有个指向当前版本的HEAD指针,当回退版本的时候,Git仅仅是把HEAD从指向last vision改为指向change,顺便把工作区的文件更新了。

┌────┐
│HEAD│
└────┘
  │
  └──> ○ append GPL
      │
      ○ add distributed
      │
      ○ wrote a readme file
--------------------------------------
# 改为指向 add distributed

┌────┐
│HEAD│
└────┘
  │
  │   ○ append GPL
  │   │
  └──> ○ add distributed
      │
      ○ wrote a readme file

总结

  • 使用命令git init,初始化Git仓库
  • 使用命令git add <file>,可反复多次使用,添加多个文件
  • 使用命令git commit -m <message>完成提交
  • 使用命令git status,查看工作区状态
  • 如果git status告诉你有文件被修改过,用git diff可以查看修改内容
  • HEAD指向当前版本,使用命令git reset --hard commit_id可以切换版本
  • 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本
  • 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本
  • 常用GIT命令汇总:Git命令汇总 – Echo小窝 (liveout.cn)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇