美文网首页
Git的学习

Git的学习

作者: iSongWei | 来源:发表于2017-08-07 22:57 被阅读16次

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 别名的设置参考网页的内容

相关文章

  • Git+node.js+TDD

    目录 Git学习 node.js学习 用Nodejs和Git完成TDD编程 Git学习 Git是什么Git是一款免...

  • Git 学习笔记

    ----------------- Git 学习 ------------------ Git 简介 Git...

  • git 入门

    git 入门学习笔记----3个入门命令:git init、git add、git commit -v 学习场景(...

  • git技术,GitHub、GitLab

    git学习 Git教程(小白快速入门版) Git教程(简化版) git详细学习 Gitlab的管理使用手册git初...

  • Git常用命令与学习总结

    安装Git Git的下载地址:Git官网下载地址 学习网址 git 学习笔记- Book 在线练习地址 基础常用指...

  • Git学习之思维导图

    Git学习之思维导图 Git学习之思维导图

  • git记录

    Git Magic图解gitgit 学习笔记git游戏(学习)1、消除文档路径中文乱码git config --g...

  • git资源学习

    git资源学习 Git详解之一 Git起步 Git详解之二 Git基础 Git详解之三 Git分支 Git详解之四...

  • Git入门学习资源

    Git入门学习资料 廖雪峰 Git教程 Git官网 Pro Git git 简明指南 github-git-che...

  • 2018-04-18

    git学习小结 关于git init,git add,git commit 用法总结 1.首先配置git 全局配置...

网友评论

      本文标题:Git的学习

      本文链接:https://www.haomeiwen.com/subject/qndzlxtx.html