内容简介:本文用一首诗的版本控制,简单认识一下Git,Git的安装,环境配置什么的我就不废话了(新手请进,高手慎入...)捷特写了一首诗《应龙》 如下:
本文用一首诗的版本控制,简单认识一下Git, 源码可见 :
Git的安装,环境配置什么的我就不废话了(新手请进,高手慎入...)
一、创建与提交
1.《应龙》: v0.01
捷特写了一首诗《应龙》 如下: J:\git\捷特诗集\应龙.txt
2.将 J:\git\捷特诗集
文件夹作为repository(版本库)
然后打开git-bash (相比cmd而言,git-bash可以识别 Linux 的命令)
$ cd /j/git/捷特诗集 $ git init Initialized empty Git repository in J:/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 add 应龙.txt $ git commit -m "《应龙》v0.0.2 忘记加作者了,已加" [master 25a0323] 《应龙》v0.0.2 忘记加作者了,已加 1 file changed, 1 insertion(+), 1 deletion(-) 复制代码
5.《应龙》: v0.03
然后捷特斟酌了一下,稍加修改
$ 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又是什么呢?这里先看下图
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 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 《应龙》 张风捷特烈第一次提交 复制代码
3.怎么回到V0.0.3版
突然想到那个SHA1的提交号应该不是吃干饭的,往上一翻,还在:
$ git reset --hard cca5e1b9ea7e28dbc608f4191f1b0ea0f15e60e9 HEAD is now at cca5e1b 《应龙》v0.0.3 稍微优化措辞 复制代码
然后你会发现V0.0.3版的内容就回来了,git log 看一下又回到刚才了
但是我要是关了终端,找不到SHA1值怎么办?
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]-----+ 复制代码
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 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
4. 同意修改 : Merge requst
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.冲突与解决
捷特此时改了一下本地文件,添加了创作日期,暂时没有提交
龙少又改了一下:捷特也merge了,说明服务器仓库的文件已改变
捷特将本地拉仓库的文件时和本地文件发生冲突,然后本地文件就成这样了:
$ 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
,如果你一直修改/提交,就会成为一条长线
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 add 应龙.txt $ git commit -m "dev 分支第一次提交" 复制代码
经过三次提交之后,觉得还行了,于是:
4.将dev分支merge到主分支
$ 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 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 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 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 # 标签推到服务端仓库 复制代码
8.现在想加新功能
用markdown的格式来写,就在featrue分支来改吧,将文件名改为 应龙.md
git checkout featrue $ git add 应龙.md $ git commit -m "featrue markdown的格式" git push -u origin featrue # 将修改同步到feature分支 复制代码
感觉还不错,然后merge到dev上,可以暂时不merge到master,继续开发,就像这样:
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
命令行写起来不舒服的人可以选择一些可视化的工具
可以很方便的查看某次提交的修改内容
可以很清晰的看到提交的流程
2.Idea家族的软件,比如AndroidStudio
首先在Settings里配置
然后将项目导入AndroidStudio(虽然不是Android项目,但是也没关系)
修改和push到远程仓库
切换分支
六、小结
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> 复制代码
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
MacTalk 人生元编程
池建强 / 人民邮电出版社 / 2014-2-1 / 45
《MacTalk·人生元编程》是一本随笔文集,主要内容来自作者的微信公众平台“MacTalk By 池建强”。本书撰写于2013年,书中时间线却不止于此。作者以一个70 后程序员的笔触,立于Mac 之上,讲述技术与人文的故事,有历史,有明天,有技术,有人生。70 多篇文章划分为六大主题:Mac、程序员与编程、科技与人文、人物、工具、职场。篇篇独立成文,可拆可合,随时阅读。 此外,作者还对原来......一起来看看 《MacTalk 人生元编程》 这本书的介绍吧!