美文网首页
git 学习

git 学习

作者: 海边的蜗牛ng | 来源:发表于2018-06-17 15:08 被阅读0次

git 区域概念

  • git分为工作区(我们自己的file)和版本库这其中版本库又包含暂存区(Stage)和分支区(master)
  • git add ********** 把文件添加到仓库

  • git reset README.md 取消提交到暂存区域

  • git commmit -m 'xxxx' 提交到仓库

  • git diff 查看提交到仓库文件之后文件又被修改的变化

  • git status 查看状态

  • git rm -f gitS.md 强制删除

  • git log 显示从最近到最远的提交日志

  • git log --pretty=oneline 只显示版本号

关于版本回退问题

  • git reset --hard HEAD^ 版本重置为上一个版本

  • git 关于版本处理进行了设置

  • git reset --hard HEAD^ 重置为上一个版本

  • 这里解释下HEAD表示当前版本 如最新提交的版本号:3a451d666e6c952e1588117ef18933be489beb18 zch,
  • 上上一个版本就是HEAD^^ 那么假如是重置为上上一个版本那么命令就是git reset --hard HEAD^^
  • 那么假如说有100个版本呢?当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
  • 如:git reset --hard HEAD~50 往上50个版本
  • 当然了如果记得具体版本号当然更好了
  • git reset --hard 3a451d666e6c952e1588117ef18933be489beb18 这样就可以了,对了这的版本号其实可以不用写全,因为是linux嘛
  • git reflog 记录一天的命令(当天)
a249f45 HEAD@{0}: reset: moving to HEAD^
545bb20 HEAD@{1}: commit: 2018年 03月 12日 星期一 10:17:56
a249f45 HEAD@{2}: commit: append GPL
3a451d6 HEAD@{3}: commit (initial): zch
  • 你可以发现这里面包含当天所有操作的版本号(因为回退到某个版本之后那个版本号你再用git log就查找不出来了)
  • git log可以查看提交历史,以便确定要回退到哪个版本
  • git reflog查看命令历史,以便确定要回到未来的哪个版本。
  • (假如在工作区的内容已经做了修改与暂存区之间相比有了变化,并且你想要要丢弃这种变化,那么你可以)
  • git checkout -- gitS.md 抛弃工作区所做的修改 那么工作区就被修改为与暂存区一样了
  • git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令

关于删除文件

  • 假如说你删除了当前工作区的某一个文件比如gitS.md

如进行了这个操作 rm gitS.md(linux 下)
这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了(git status)
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令(git rm gitS.md) (git commit -m 'yes delete file')
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本 命令(git checkout -- gitS.md)

分支(重点)

  • git checkout -b dev (创建dev分支,然后切换到dev分支)
git branch dev 创建分支dev
git checkout dev 切换到分支dev
  • git branch命令查看当前分支

git branch命令会列出所有分支,当前分支前面会标一个*号

* dev
  master

可以随便写点内容然后提交 git commit -m 'branch test'
现在,dev分支的工作完成,我们就可以切换回master分支

  • git checkout master 切换到当前分支 (这时查看gitS.md刚刚随便写的内容并没有在file中)

我们需要与当前分支合并

  • git merge dev (dev与master合并,master表示主分支)

cat gitS.md 就看到我们添加的内容了

  • 再次查看当前分支 git branch (可以看到现在的分支已经是主分支了)
  dev
* master
  • 删除dev分支(git branch -d dev)
  • 再次查看 git branch (可以看到只是主分支master了)
* master

分支小结

Git鼓励大量使用分支:

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

分支冲突

当新创建了一个分支,并且修改内容提交之后,而后又转回到主分支并且又做了修改并且也提交之后,在这之后又进行了合并分支
这里我们把新创建分支并且做修改的内容称为a,把转到主分支并且做修改的内容称为b,当且仅当a与b相同的时候,这时会发生冲突
(因为这样在工作区的物理映射都一致了,ps因为都是由工作区提交到缓存区的嘛)
这个时候我们需要手动解决冲突问题,只需要在把工作区的内容重新修改(这里是已经合并之后)当然不能和b一致有一点点区别即可
然后重新提交就好

分支管理策略

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
  • 新创建一个分支dev (git checkout -b dev)
  • (git add gitS.md) (git commit -m 'add merge')
  • 在切换为主分支 (git checkout master)
  • 合并分支 以前的方式(git merge dev),这种方式上面说了会丢失信息,因此不采用此种方式(git merge --no-ff -m 'merge with no-ff' dev)这样就留下了合并信息
  • (git log --graph --pretty=oneline --abbrev-commit)合并信息如下:
*   c41b6a7 merge with no-ff
|\  
| * d93a2e5 add merge
|/  
*   8e4aa4c conflict fixed
分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,

Bug分支

软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,
所以,每个bug都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

当你接到一个修复一个代号101的bug的任务时,很自然地,你想创建一个分支issue-101来修复它,但是,等等,当前正在dev上进行的工作还没有提交
并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?
幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
  • git stash (暂时保存未提交的状态)
  • (git checkout -b issue-101) 说明:却换到此版本之后实际工作区的内容并没有你还没有提交的内容,因此你做出修改
承接上面,关于是否有冲突问题,冲突的原因是你在主分支(master)开发的同时又去修改了项目内容并且和修复bug的分支所做出的修改有相同的地方
,这时就会产生冲突,在你把bug分支与主分支合并之后并且恰好产生冲突git是会提示的 git会标识出来 这个时侯bug修改的内容已经被添加到了主分支
因此主分支中关于冲突的部分被git标识了,这个时候我们自己手动修改即可(重复的删除即可,然后在重新提交,检查无误之后删除bug分支)

  • 修复完成之后提交 (git add gitS.md) (git commit -m 'fix bug 101')

  • 切换到master分支 (git checkout master)

  • 与bug分支合并(git merge --no-ff -m "merged bug fix 101" issue-101) 删除issue-101 (git branch -d issue-101)

  • (检查是否有冲突,一般不会有)

  • 回到工作的分支上去写代码,这时需要恢复 (git stash pop)||恢复的同时把stash内容也删了

  • 注意:可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令git stash apply stash@{0}或者git stash pop stash@{0}

  • (检查是否有冲突 我自己检查是有冲突的, git给我把恢复的那行(原来的)给标识出来了,然后就删除多余的并且也把标识符也删除然后重新提交即可)

强行删除某个分支 (假如某个项目中的某个功能不需要了,并且这个功能还没有提交,那么需要强行删除这个分支)(git branch -D feature-xx)(只需把d改为大写即可)

多人协作

  • 要查看远程库的信息(git remote) origin ,远程仓库的默认名称是origin

  • 查看详细信息(git remote -v)

origin  git@github.com:noatnu/docZCH.git (fetch)
origin  git@github.com:noatnu/docZCH.git (push)
psuh 推送地址,fetch抓取地址(当且仅当你有推送权限才会看到push地址)

推送分支

  • 推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上
  • 假如推送本地的主分支 (git push origin master),假如不是主分支,例如要推送的分支是dev,那么 (git push origin dev)

抓取分支

  • 多人协作时,大家都会往master和dev分支上推送各自的修改
  • A小伙伴 git clone git@github.com:noatnu/jkblue.git
  • A小伙伴从远程库clone时,默认情况下,A小伙伴只能看到本地的master分支
  • 现在,A小伙伴要在dev分支上开发,就必须创建远程origin的dev分支到本地,于是他用这个命令创建本地dev分支
  • (git checkout -b dev origin/dev) 相当于把远程仓库与新创建并且已经切换到dev的分支相关联起来
  • (git checkout -b dev)因为此命令表示创建并且切换,后面origin/dev表示关联起来

标签

  • 在Git中打标签非常简单,首先,切换到需要打标签的分支上
  • (git checkout dev)
  • 打标签 (git tag v1.1)
  • 查看标签 git tag
  • 还可以对具体的版本打标签,比如某某版本号是123456
  • (git tag v1.2 123456)
  • 还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字
  • (git tag -a v1.2 -m '打标签' 123456)

相关文章

  • 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/kbeweftx.html