美文网首页
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的学习

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