杂篇:一首诗认识[- Git -]

栏目: 编程工具 · 发布时间: 5年前

内容简介:本文用一首诗的版本控制,简单认识一下Git,Git的安装,环境配置什么的我就不废话了(新手请进,高手慎入...)捷特写了一首诗《应龙》 如下:

本文用一首诗的版本控制,简单认识一下Git, 源码可见 :

Git的安装,环境配置什么的我就不废话了(新手请进,高手慎入...)

一、创建与提交

1.《应龙》: v0.01

捷特写了一首诗《应龙》 如下: J:\git\捷特诗集\应龙.txt

杂篇:一首诗认识[- Git -]

2.将 J:\git\捷特诗集 文件夹作为repository(版本库)

然后打开git-bash (相比cmd而言,git-bash可以识别 Linux 的命令)

$ cd /j/git/捷特诗集

$ git init
Initialized empty Git repository in J:/git/捷特诗集/.git/
复制代码
杂篇:一首诗认识[- Git -]

3.将刚才写的《应龙》提交

$ git add 应龙.txt

$ git commit -m "《应龙》 张风捷特烈第一次提交"
[master (root-commit) c42ecee] 《应龙》 张风捷特烈第一次提交
 1 file changed, 3 insertions(+)
 create mode 100644 "\345\272\224\351\276\231.txt"
复制代码

4.《应龙》: v0.02

然后发现忘记写大名了,所以修改了一下,再提交

杂篇:一首诗认识[- Git -]
$ git add 应龙.txt

$ git commit -m "《应龙》v0.0.2 忘记加作者了,已加"
[master 25a0323] 《应龙》v0.0.2 忘记加作者了,已加
 1 file changed, 1 insertion(+), 1 deletion(-)
复制代码

5.《应龙》: v0.03

然后捷特斟酌了一下,稍加修改

杂篇:一首诗认识[- Git -]
$ git add 应龙.txt

$ git commit -m "《应龙》v0.0.3 稍微优化措辞"
[master cca5e1b] 《应龙》v0.0.3 稍微优化措辞
 1 file changed, 1 insertion(+), 1 deletion(-)
复制代码

二、时空穿梭

1.提交的日志

是不是很强大,可以将你提交的时间、备注显示出来

其中每次提交会有一个 SHA1的commit版本号 ,用来唯一表识

$ git log
commit cca5e1b9ea7e28dbc608f4191f1b0ea0f15e60e9 (HEAD -> master)
Author: Administrator <1981462002@qq.com>
Date:   Sat Apr 27 22:10:27 2019 +0800

    《应龙》v0.0.3 稍微优化措辞

commit 25a0323bc71a8c8c436d94bcb6c9d472c88d6931
Author: Administrator <1981462002@qq.com>
Date:   Sat Apr 27 22:02:52 2019 +0800

    《应龙》v0.0.2 忘记加作者了,已加

commit c42eceed619d5d90b631fd6587240fdfd04fc1e9
Author: Administrator <1981462002@qq.com>
Date:   Sat Apr 27 21:56:42 2019 +0800

    《应龙》 张风捷特烈第一次提交
复制代码

那master和HEAD又是什么呢?这里先看下图

杂篇:一首诗认识[- Git -]

2.版本回溯

现在我想看看V0.0.2版的内容可不可以呢? reset --hard HEAD~1 移动头节点 ~移多少个

$ git reset --hard HEAD~1
HEAD is now at 25a0323 《应龙》v0.0.2 忘记加作者了,已加
复制代码

然后你会发现V0.0.2版的内容就回来了,但当你再 git log 时,发现v0.0.3版的木有了,怎么回去呢?

杂篇:一首诗认识[- Git -]
$ git log
commit 25a0323bc71a8c8c436d94bcb6c9d472c88d6931 (HEAD -> master)
Author: Administrator <1981462002@qq.com>
Date:   Sat Apr 27 22:02:52 2019 +0800

    《应龙》v0.0.2 忘记加作者了,已加

commit c42eceed619d5d90b631fd6587240fdfd04fc1e9
Author: Administrator <1981462002@qq.com>
Date:   Sat Apr 27 21:56:42 2019 +0800

    《应龙》 张风捷特烈第一次提交
复制代码
杂篇:一首诗认识[- Git -]

3.怎么回到V0.0.3版

突然想到那个SHA1的提交号应该不是吃干饭的,往上一翻,还在:

$ git reset --hard cca5e1b9ea7e28dbc608f4191f1b0ea0f15e60e9
HEAD is now at cca5e1b 《应龙》v0.0.3 稍微优化措辞
复制代码

然后你会发现V0.0.3版的内容就回来了,git log 看一下又回到刚才了

但是我要是关了终端,找不到SHA1值怎么办?

杂篇:一首诗认识[- Git -]

4. git reflog 前来救驾

这里可以看到v0.0.3提交的信息, cca5e1b 就是提交的SHA1开头的几个字母

注意: git reset --hard 不须要完整的SHA1值,它会自己找:所以 SHA1手中握,版本任穿梭

$ git reflog
25a0323 (HEAD -> master) HEAD@{0}: reset: moving to HEAD~1
cca5e1b HEAD@{1}: reset: moving to cca5e1b9ea7e28dbc608f4191f1b0ea0f15e60e9
25a0323 (HEAD -> master) HEAD@{2}: reset: moving to HEAD~1
cca5e1b HEAD@{3}: commit: 《应龙》v0.0.3 稍微优化措辞
25a0323 (HEAD -> master) HEAD@{4}: commit: 《应龙》v0.0.2 忘记加作者了,已加
c42ecee HEAD@{5}: commit (initial): 《应龙》 张风捷特烈第一次提交

$ git reset --hard cca5e1b
复制代码

三、远程仓库 : Github

你可以将Github当成一个有图形界面的文件存储服务器,简称 远程仓库
现在我想邀请远在火星的龙少来帮我推敲一下这首诗

1.Github 账号上创建一个ssh Key

$ ssh-keygen -t rsa -C "1981462002@qq.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Administrator/.ssh/id_rsa.
Your public key has been saved in /c/Users/Administrator/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:3uKFITBRP8RXzkgiN9QG1qySSxitzokD2jjHOGKkuJ4 1981462002@qq.com
The key's randomart image is:
+---[RSA 2048]----+
|    .oooO=...    |
|    ...*.+*+     |
|    o+ .o+. o    |
|..  oo+ ..       |
|=* + o.oS        |
|X.* + .o +       |
|o= .    + o      |
|. .    . o       |
|.E      .        |
+----[SHA256]-----+
复制代码
杂篇:一首诗认识[- Git -]

1.将远程仓库项目拷贝到本地

$ git clone git@github.com:toly1994328/Poem-GitTest.git
Cloning into 'Poem-GitTest'...
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (4/4), done.
复制代码

2.将刚才的诗拷贝一下提交

这样龙少就可以用浏览器访问Github看到了

杂篇:一首诗认识[- Git -]
$ git add 应龙.txt

$ git commit -m "《应龙》v0.0.1 提交远程仓库"
[master 6342daf] 《应龙》v0.0.1 提交远程仓库
 1 file changed, 3 insertions(+)
 create mode 100644 "\345\272\224\351\276\231.txt"

|--- 现在只是本地提交 ,远程仓库是没有记录的,需要下面:--------------
$ git push -u origin master
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 475 bytes | 475.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:toly1994328/Poem-GitTest.git
   1cd6839..6342daf  master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
复制代码

3.远程协作

这时龙少看到了,然后fork一下,改了一个字,然后发起一个requst

杂篇:一首诗认识[- Git -]

4. 同意修改 : Merge requst

杂篇:一首诗认识[- Git -]

5. 现在本地和仓库的文件不一致了怎么办?

|--- 一句话搞定 ----------
$ git merge origin master # 融合origin远端的master分支
或者:git pull origin master # 拉取远端master分支的资源

|--- 当需要查看一下信息时: ----------
$ git remote -v # 查看远端的名称
origin  git@github.com:toly1994328/Poem-GitTest.git (fetch)
origin  git@github.com:toly1994328/Poem-GitTest.git (push)

$ git diff origin master # 查看本地文件与远端的差异
diff --git "a/\345\272\224\351\276\231.txt" "b/\345\272\224\351\276\231.txt"
index f5dd948..e85e740 100644
--- "a/\345\272\224\351\276\231.txt"
+++ "b/\345\272\224\351\276\231.txt"
@@ -1,3 +1,3 @@
 应龙  ---- 张风捷特烈
-一游小池两岁月,洗却凡世几闲尘。
-时逢雷霆风会雨,应乘扶摇化入云。
+戏游小池两岁月,洗却凡世几闲尘。
+时逢雷霆风会雨,应乘扶摇化入云。
复制代码

OK,这样就完成了一次简单的多人协作

6.冲突与解决

捷特此时改了一下本地文件,添加了创作日期,暂时没有提交

杂篇:一首诗认识[- Git -]

龙少又改了一下:捷特也merge了,说明服务器仓库的文件已改变

杂篇:一首诗认识[- Git -]

捷特将本地拉仓库的文件时和本地文件发生冲突,然后本地文件就成这样了:

杂篇:一首诗认识[- Git -]
$ git add 应龙.txt

$ git commit -m "《应龙》v0.0.2 添加日期"
[master 308dc12] 《应龙》v0.0.2 添加日期
 1 file changed, 1 insertion(+)

$ git pull origin master # 先将服务器上的拉下来
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), done.
From github.com:toly1994328/Poem-GitTest
 * branch            master     -> FETCH_HEAD   # 本地
   55f6a69..0185ee5  master     -> origin/master # 远端的仓库中
Auto-merging 应龙.txt
CONFLICT (content): Merge conflict in 应龙.txt # 发生冲突了
Automatic merge failed; fix conflicts and then commit the result.

---->[提交解决冲突之后的文件]-------------------------------
$ git add 应龙.txt

$ git commit -m "《应龙》--解决冲突"
[master f508868] 《应龙》--解决冲突

$ git push -u origin master #推到服务端仓库
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 638 bytes | 638.00 KiB/s, done.
Total 6 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), completed with 2 local objects.
To github.com:toly1994328/Poem-GitTest.git
   0185ee5..f508868  master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

复制代码

四、分支

1.主分支

每一次的提交相当于创建了一个节点,它有一个唯一的SHA1值来确定它的唯一

在一个git项目初始时,会 默认创建分支master ,如果你一直修改/提交,就会成为一条长线

杂篇:一首诗认识[- Git -]

2.创建分支: git branch XXX

当v.0.0.3已经符合预期了,现在我有个想法,把这首诗写成8句话

现在新建一个分支dev来开发这个版本

$ git branch # 查看当前分支
* master

$ git branch dev #创建名为dev的分支

$ git branch # 查看当前分支,当前还在master上
  dev
* master

$ git checkout dev #切换到dev分支
Switched to branch 'dev'
复制代码

注:创建并切换到dev分支 git checkout -b dev

3. 在 dev 分支提交

杂篇:一首诗认识[- Git -]
$ git add 应龙.txt
$ git commit -m "dev 分支第一次提交"
复制代码
杂篇:一首诗认识[- Git -]
杂篇:一首诗认识[- Git -]

经过三次提交之后,觉得还行了,于是:

4.将dev分支merge到主分支

杂篇:一首诗认识[- Git -]
$ git checkout master #回到主分支

$ git merge dev # merge到主分支
Updating f508868..78f60b0
Fast-forward
 "\345\272\224\351\276\231.txt" | 2 ++
 1 file changed, 2 insertions(+)
 
$ git push -u origin master #推到服务端仓库
复制代码

可以查看记录和Merge的情况

$  git log --graph --pretty=oneline --abbrev-commit
* 78f60b0 (HEAD -> master, origin/master, origin/HEAD, dev) dev 分支第三次提交
* e34cd69 dev 分支第二次提交
* 37097fc dev 分支第一次提交
*   f508868 《应龙》--解决冲突
|\
| *   0185ee5 Merge pull request #2 from zfjtl/patch-1
| |\
| | * 38300ed Update 应龙.txt
| |/
* | 308dc12 《应龙》v0.0.2 添加日期
|/
*   55f6a69 Merge pull request #1 from zfjtl/master
|\
| * fe2d3bf Update 应龙.txt
|/
* 6342daf 《应龙》v0.0.1 提交远程仓库
* 1cd6839 Initial commit
复制代码

注:回溯某分支的某版本,和上面一样,只要用SHA1就行了

5.将本地分支同步到github

杂篇:一首诗认识[- Git -]
$ git push origin dev
Total 0 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'dev' on GitHub by visiting:
remote:      https://github.com/toly1994328/Poem-GitTest/pull/new/dev
remote:
To github.com:toly1994328/Poem-GitTest.git
 * [new branch]      dev -> dev
复制代码

6.打标签和同步到github

杂篇:一首诗认识[- Git -]
git tag v0.0.4 # 打标签

$ git push origin --tags
Total 0 (delta 0), reused 0 (delta 0)
To github.com:toly1994328/Poem-GitTest.git
 * [new tag]         v0.0.4 -> v0.0.4


$ git show v0.0.4 #查看标签
commit 78f60b055efb8b7daf59951f3f1558d623b11b1a (HEAD -> master, tag: v0.0.4, origin/master, origin/HEAD)
Author: Administrator <1981462002@qq.com>
Date:   Sun Apr 28 09:56:05 2019 +0800

    dev 分支第三次提交

diff --git "a/\345\272\224\351\276\231.txt" "b/\345\272\224\351\276\231.txt"
index 4fe0222..42858c1 100644
--- "a/\345\272\224\351\276\231.txt"
+++ "b/\345\272\224\351\276\231.txt"
@@ -2,5 +2,6 @@
 一游小池两岁月,洗却凡世几闲尘。
 时逢雷霆风会雨,应乘扶摇化入云。
 蛇虫何力卷波涛,雀鸟焉能平九霄。
+龙鹏所至非宏志,莫以已见比拟之。
                        2018.2.2  捷特作
             2019.4.27 龙少批阅
复制代码

7. 遇到bug时

可见确实有点小问题

杂篇:一首诗认识[- Git -]
git checkout -b featrue

$ git add 应龙.txt
$ git commit -m "featrue 分支修复bug"

|--- 合并featrue到dev分支
git checkout dev
git merge featrue

git checkout master
git merge dev

git push -u origin master #推到服务端仓库
git push origin featrue

git tag v0.0.5 # 打标签
git push origin --tags # 标签推到服务端仓库
复制代码
杂篇:一首诗认识[- Git -]
杂篇:一首诗认识[- Git -]

8.现在想加新功能

用markdown的格式来写,就在featrue分支来改吧,将文件名改为 应龙.md

git checkout featrue

$ git add 应龙.md
$ git commit -m "featrue markdown的格式"

git push -u origin featrue # 将修改同步到feature分支
复制代码
杂篇:一首诗认识[- Git -]

感觉还不错,然后merge到dev上,可以暂时不merge到master,继续开发,就像这样:

杂篇:一首诗认识[- Git -]
git checkout dev
git merge featrue

dev继续开发...

git checkout master
git merge dev
git push -u origin master # 将修改同步到feature分支

git tag v0.0.6 # 打标签
git push origin --tags # 标签推到服务端仓库
复制代码

五、可视化界面

1.TortoiseGit

命令行写起来不舒服的人可以选择一些可视化的工具

杂篇:一首诗认识[- Git -]

可以很方便的查看某次提交的修改内容

杂篇:一首诗认识[- Git -]

可以很清晰的看到提交的流程

杂篇:一首诗认识[- Git -]

2.Idea家族的软件,比如AndroidStudio

首先在Settings里配置

杂篇:一首诗认识[- Git -]

然后将项目导入AndroidStudio(虽然不是Android项目,但是也没关系)

杂篇:一首诗认识[- Git -]

修改和push到远程仓库

杂篇:一首诗认识[- Git -]

切换分支

杂篇:一首诗认识[- Git -]

六、小结

Git 就是 安心丸 + 后悔药 ,git一下,何乐不为?

1.配置相关

查看版本号:    git --version
查看配置:       git config --list
                    |--- git config --list --global
                    |--- git config --list --system
                    |--- git config --list --local
查看单一信息:   git config user.email
复制代码

2.操作相关

初始化:     git init
添加文件:  git add <file>
提交记录:  git commit -m <备注>
记录溯回:  git reset --hard HEAD~<step>
记录溯回:  git reset --hard <SHA1>
删除文件:  git rm <file>
查看状态:  git status
打标签:    git tag v0.0.6
复制代码

3.查看相关

git log
git reflog
git reflog --all
git log --graph
git log --graph --pretty=oneline --abbrev-commit
复制代码

4.远端相关

克隆项目:      git clone git@github.com:toly1994328/Poem-GitTest.git
推送到远端:    git push -u origin <branch>
拉取远端资源:  git pull origin <branch>
与远端同步:    git merge origin <branch>
查看远端信息:  git remote -v
查看远端差异:  git diff origin <branch>
推送标签:      git push origin --tags
复制代码

5.分支相关

查看分支:              git branch
创建分支:              git branch <name>
切换分支:              git checkout <name>
创建+切换分支:         git checkout -b <name>
合并目标分支到当前分支:  git merge <目标分支>  
删除分支:              git branch -d <name>
复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Practical JavaScript, DOM Scripting and Ajax Projects

Practical JavaScript, DOM Scripting and Ajax Projects

Frank Zammetti / Apress / April 16, 2007 / $44.99

http://www.amazon.com/exec/obidos/tg/detail/-/1590598164/ Book Description Practical JavaScript, DOM, and Ajax Projects is ideal for web developers already experienced in JavaScript who want to ......一起来看看 《Practical JavaScript, DOM Scripting and Ajax Projects》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具