Git的学习

Git的学习

参考链接

学习开始 具体参考上面链接就不多说了

最基本的初始化/创建

创建版本仓库
    mkdir myGit
    cd myGit
    pwd
    /Users/mac/desktop/myGit
通过 git init 来把这个仓库变成可以管理的仓库,会发现多一个 .git的文件夹
添加一个文本, 先创建一个txt文件, 然后添加到文件夹中
#添加到仓库
git add readme.txt

#提交
git commit -m "wrote a readme file"

小结

初始化一个Git仓库,使用git init命令。

第一步,使用命令git add <file>,注意,可反复多次使用,添加多个文件;

第二步,使用命令git commit,完成。

修改文件

修改文本的内容
#查看当前的状态
git status 
#查看当前的改变
git diff <文件名字> 
提交的话重新进行
#没有任何输出表示没问题
git add readme.txt 
然后查看下当前的状态 有一个是需要提交的状态
git commit -m "add something"
然后再查看下当前的状态
git status

小结

要随时掌握工作区的状态,使用git status命令。

如果git status告诉你有文件被修改过,用git diff可以查看修改内容。

前面的命令综合来一遍
#创建一个当前的git仓库
git init 
#然后添加文件进去
#把文件添加到仓库中去
git add <fileName>
#查看下状态
git status 
#提交状态
git commit -m "注释" 
#查看当前状态
git status 
#然后修改文件后
#查看文件的变化
git diff 
#查看状态
git status 
#添加到暂存区
git add <fileName> 
#提交状态
git commit -m "注释"  
git status

版本回退

#显示所有的版本
git log 
#只显示注释部分
git log --pretty=oneline 
如果现在要回退的话 使用命令
# HEAD 表示当前版本  ^表示上一个版本
# hard 之后再说
git reset --hard HEAD^
这时会发现 txt 文本发生了变化
# 预览文本信息
cat readme.txt 
然后现在 git log后也没有了之前的版本

只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append GPL的commit id是3628164...,于是就可以指定回到未来的某个版本:

git reset --hard 3242432
所以呢就又回来了
但是如果电脑关闭了, 就没有版本号了, 所以需要下面命令, 会显示前面的版本号
git reflog

小结

git log显示提交历史 方便回退版本

git reflog 查看命令历史 翻遍回退到未来的版本

工作区 暂缓区

git 相比 svn 是有一个暂缓区的概念

工作区(工作区(Working Directory)

就是能看到的目录 相应的文件夹

版本库(Repository)

隐藏的文件夹 .git 就是版本库, .git 存储着很多东西

其中有个stage(或者index)的暂存区

还有自动创建的master 以及只想master 的一个指针叫做 HEAD

其中 git add 把文件添加进去 就是把文件添加到暂存区

git commit 提交更改 就是把暂存区的内容提交到当前分支

管理修改

#如果操作顺序
第一次修改 -> git add -> 第二次修改 -> git commit

#会导致第二次的没有提交上去,才会提交上去
第一次修改 -> git add -> 第二次修改 -> git add -> git commit
撤销修改
如果仅仅是做了修改没有add
#Git会告诉你,git checkout -- file
#可以丢弃工作区的修改, 回到原来状态
git checkout -- readme.txt

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销

如果仅仅是做了修改并add
#清空工作区的 是没有用的
git checkout -- <fileName> 
如果已经提交到缓存区了  则执行两部
#清空暂存区的
git reset HEAD <fileName> 
#清空工作区的
git checkout -- <fileName> 

小结

git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令

删除文件

删除文件也是一个修改操作

git add info.txt
rm info.txt
# 提示有文件删除了
git status 

# 回到初始状态
git checkout -- info.txt 


#或者就是删除状态
git  add info,.txt  
rm info.txt
git rm info.txt
#如果发现不需要删除文件  就继续执行
git checkout -- info.txt

git checkout 其实就是用版本库里的东西来替换工作区的东西 一键还原

远程仓库的使用

根据网站上配置SSH 或者账号信息

链接好之后
#推到远程仓库
git push
关联远程库的方法

使用命令 git remote add origin git@server-name:path/repo-name.git;

使用命令git push origin master推送最新修改;

从远程仓库 克隆 直接创建一个文件夹
git clone https://github.com/isongwei/learngit.git
#然后进入到相应的文件夹下
#就可以查看相关信息了
git log 

创建与合并分支

一开始只有master 主分支 HEAD 是指向这个主分支的, master 才是指向提交的

每次提交分支都会往前移动一格

当创建新的分支的时候 Git 创建一个新的指针 指向master 相同的提交

再把HEAD指向 dev

如果dev 的工作完成了 就可以把dev 合并到master 上 最简单的就是把 master 指向dev

分支完成 甚至可以删除 dev 分支 就是把dev 指针删除 删除后就剩下一个master 分支

首先创建 dev 分支
#选择切换到dev分支
git checkout -b dev 
命令加上-b 表示创建并切换 相当于下面两条命令
git branch dev
git checkout dev
然后查看当前分支
git branch
命令会列出所有分支 当前的分支前面会带有*
操作尝试下
#一系列的步骤就是
# 创建一个分支
git checkout -b dev
#当前的分支状态
git branch 

#对文件进行修改
# 修改放到暂存区
git add <fileName> 
# 提交更改
git commit -m "" 
#分支上的就完成了
现在切换到master 分支上
#选择你这分支到 主分支上
会发现添加的修改没有了
git checkout master 

可以来回切换分支

现在把分支合并到master 上

#合并分支 合并制定分支到当前分支
git merge dev 
#其中有一个 Fast-forward 信息  快进模式 不是每次都是
合并后就可以删除分支了
#删除之后就只剩下master了
git branch -d dev

小结

So Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

查看分支 git branch

创建分支 git checkout -b dev

分步实现

git branch dev

git checkout dev

合并某merge分支到当前分支 git merge dev

删除分支 git branch -d dev

冲突的解决

当进入分支 修改一个文件后 提交

在切换到master 修改 提交

git merge dev

会提示合并失败

然后再进入文件进行修改

然后常规的提交就可以了
最后删除分支

小结

这个是用来查看分支图的, 打印的是分支的路线

git log --graph

分支管理策略

对于一般的 合并分支是使用的是Fastforward 模式

但是删除分支后 分支的信息就会丢失

现在使用 --no-ff 参数 表示禁用 Fast forward
git merge --no-ff -m "分支的合并"
现在看下结果
#显示简要的提交 以及分支情况
git log --graph --pretty=oneline --abbrev-commit

小结

master 是非常稳定的 平时不在上面操作

dev 不稳定

如果要发布1.0 版本, 再把dev 合并到master上

在master上发布1.0 版本

所以每个人都在自己的dev上干活, 一直往自己的dev上合并

合并分支时 机上--no-ff 参数就可以用普通模式合并 合并后的历史有分支 能看出来曾经做过合并

而 fast forward看不出曾经做过合并

bug 分支

使用情景 当前正在开发其他任务 但是线上出现了Bug 而现在做的有没办法惊醒提交

所以Git 的 stash 功能把当前的工作储存下来 修复好后再继续工作

下面开始进行操作
#命令运行完后会发现 回到了没有修改的状态
git stash
#查看工作区就是干净的 
git status 

然后确定在哪个分支上进行修改

假如在master 上

#切换到master上
git checkout master
#创建bug 分支
git checkout -b issue-101
#现在开始修复bug
#修改后进行常规的提交操作
git status #提交后都是干净的

然后看下之前的状态
git stash list
现在是有两种方法恢复
1 #恢复后stash的内容不删除 
  git stash apply
  #来进行删除 
  git stash drop
2 #恢复的同时stash的内容也删除了 
  git stash pop 


开始操作 
git stash pop


这是后再次
git stash list
显示已经没有 list 了
如果在一个分支上进行同样的操作  可能就会出现冲突
按照之前的操作进行处理

当然也可以进行制定的
git stash apply stash@{0}

小结
修复Bug 的时候我们通过创建新的分支进行修复 然后合并 最后删除

当手头的工作没有完成时 先把现在 git stash一下 然后修复Bug
再git stash pop 回到工作现场

Feature分支

在实际的开发过程中 总是有无尽的需求添加进来

比如 接到一个功能性的需求

先创建一分支
git checkout -b dev_new
一会开发完毕
git add <fileName>
git commit -m "....."
git status
然后切换到现在自己的开发分支 dev 并删除分支
git checkout dev
git merge --no-ff -m dev_new    
但是此时 新功能取消 虽然白干了 分支必须删除
git branch -d dev_new
这时会提示销毁失败 因为还没有合并
# 强制删除
git branch -D dev_new 

多人合作

把自己的文件 push 到Git Hub 上
#可能需要创建的分支
git checkout -b dev origin/dev 
#不时的上传自己分支信息
git push origin dev
但是如果两个人改了同一个东西会导致 后面的人push 失败
#所以需要先pull
#然后解决冲突
git pull

小结

因此多人工作 的工作模式是这样的

1 首先 尝试 git push 推送自己的修改

2 如果推送失败 是因为远程的更新 所以 git pull 尝试合并

3 如果合并有冲突 则解决冲突 并在本地提交

4 没有冲突后 再次 git push

注意 如果git pull失败 提示

no tracking information

则说明本地的分支 和远程的分支的链接关系没有创建

则用命令

git branch --set-upstream branch-name orgin/branch-name

查看远程库信息 git remote -v

本地的分支如果不推送是看不到的

标签处理

发布一个版本时 通常在版本库 打一个标签

这样就唯一确定了打标签时刻的版本

Git的标签是版本库的快照 但是实际就是指向某个commit 的指针
用来替代 commit的难记

先回顾下打分支
#列出当前的分支
git branch 
# 切换分支
git checkout dev 
打分支
#打分支
git tag v1.0
# 查看当前的分支
git tag 

默认打的标签是到最新提交的commit上

如果要给之前的commit 打分支

#方法就是找到之前的提交信息
git log --pretty=oneline --abbrev-commit
#然后
git tag v0.9 commit_id

好像可以打多个标签

#然后 两个的显示效果是一样的
git show tag    
git show commit_id
#也可以打的标签详细一点
git tag -a v0.7 -m "version 0.7 released" commit_id


当然在高级一点
还可以通过-s用私钥签名一个标签:
git tag -s v0.2 -m "version"    commit_id
签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错:
gpg: signing failed: secret key not available
error: gpg failed to sign the data
error: unable to sign the tag

小结

1 git tag v1.0.0 新建标签 默认HEAD

2 git tag -a <tagname> -m "blablabla..."可以指定标签信息

3 git tag 所有的标签信息

标签的操作

本地的标签都只存储在本地 所以打错后可以删除
git tag -d v0.1
推送标签
git push origin v0.1
or
git push origin --tags
如果已经推到了远程
#首先本地删除
git tag -d v0.1
#再删除远程的
git push origin :refs/tags/v0.1

如果查看远程是否删除了标签 可以登录Git Hub 看下

小结

1 git push origin <tagname>可以推送一个本地标签

2 git push origin --tags可以推送全部未推送过的本地标签

3 git tag -d <tagname>可以删除一个本地标签

4 git push origin :refs/tags/<tagname>可以删除一个远程标签

相关配置

一些配置文件, 在根目录区创建一个文件

#这个是随`.git`在同目录的一个文件
.gitignore
#如果要配置全局的可以打开系统的通用配置文件
~/.config/git

Git忽略文件

如果想添加被忽略的文件

#强制添加
git add -f <fileName>

#这个可以检查忽略文件
git check-ignore

git 别名的设置参考网页的内容

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容