zoukankan      html  css  js  c++  java
  • Git笔记整理

    GitHub的创始人是Linus,使用C语言编写,也是最初的Linux开发发起人。

    集中式和分布式的版本控制不同

        集中式:版本库是放在中央服务器中的,工作的时候要从服务器取得最新版本之后才开始工作,工作完之后,在提交的中央服务器。必须要有网络。

        分布式: 没有中央控制系统,每个人的电脑都有完整的版本库,中央服务器只有来大家交换修改的文件,

        git在不同系统上的安装,自行百度。(我现在觉得Kali 系统做的越来越好了,之前在物理机上安装的时候兼容性不是很好) 

       git - config 命令的 --config 参数,表示这台机器上的所有的仓库都使用这个配置,当然也可以对某个仓库指定不同的用户名和Email

      创建一个空的仓库 我实在 opt目录下创建了一个叫做learnGit的仓库   (pwd是用来显示当前的目录) 注:创建完后当前目录下生成一个 .git文件   通过命令:ls -ah 可以查看隐藏文件

    注:Git只能跟踪文本文件的控制,没有办法控制图像视频文件。另外一点 Word文件时Microsoft的一种二进制文件,因此没有办法跟踪Word上的改动文件。这里也不推荐使用记事本来写代码,最好使用notepad++(默认编码设置是UTF-8.)

    将新建的文本添加到仓库中:  使用 git add 提交文件  ,使用  git commit -m "备注“”  提交的跟踪信息  

    git  status 命令可以帮助我们时刻掌握仓库当前的状态, 下载我们先将readme文件修改 ,然后使用该命令  git status (这个命令跟 linux 下 service status  类似)

    上面的显示 readme文件修改了但是没有提交  ,如果我们不知道修改了什么地方 可以使用git diff 来查看修改的地方

    可以看我们之前添加了一行,知道修改了之后我们就就将它提交一遍(为了放心,我们在 git commit之前再次  git status一下)

    最后提交 备注一下

    可以使用  git log 命令查看版本的历史记录

     

    现在来看斑斑的回退  使用命令  git reset   -- hard  参数   (在 Git 很重 HEAD 表示当前的版本, 上一个版本是 HEAD^  ,上上一个版本是 HEAD^^ ,如果回退的较多可以写成这样  HEAD ~100 表示第一百个版本)

    使用 git log 看看,发现之前的一个记录没有了,

     如果想撤销之前的操作,不要关闭窗口,继续 git reset --hard 加上前面的 一串记录数据

    git 提供了一个记录每次使用命令 命令 :   git reflog

    总结   使用 git 回退版本  使用命令  :   git reset --hard commit_id

    git的目录理解:

       工作区: 就是我们刚才建立的一个文件 leanGit。在之前我们创建仓库的时候就产生了一个  .git 文件, 他是git的版本控制文件, git版本仓库中有很多东西,其中最重要的是称为stage的暂存区,还有git创建的第一个master,以及master的一个指针 HEAD,(这里我使用廖老师的图)

    在前面回顾一下  : 把文件添加到仓库分成了两步:第一步第 使用 git  add 把文件添加进去I(实际上是将文件修改添加到暂存区)--------第二步git commit  将暂存区的所有文件添加到当前分支,因为我们在git版本库的时候创建了唯一的一个master分支,所以 git commit就是往 master分支上提交更改。具体的提交变换工程图解

    git管理的是修改,而不是文件 ,为了说明这个做一个实验:

    首先对readme问价添加一行 ,然后将他添加到仓库暂存区 ,查看

    可以看到gitcommit 只负责对暂存区的修改,

     所以再次提交之后才会看到结果,更新

     

    如何撤销修改:在文件提交的的时候发现,文件出现错误,为了及时修改,git提示使用 git checkout -- file 可以丢弃修改工作区的修改。

       廖雪峰说 一种是 readme自自改之后还没有放到暂存取,现在撤销修改就回到和版本库一模一样的状态,一种是readme已经次该添加到暂存区后,又做了修改,撤销修改就回到添加暂存区后的状态,总之就是让这个文件回到最近一次  gitcommit或者 git add的状态 。

    下面的 使用 git commit 之后使用 git checkout  但是发现一旦使用 该命令 就不能撤销,只能使用 git reset -- hard HEAD参数来进行版本的回退

    root@kali:/opt/learnGit# cat readme.txt
    readme here
    learn github git is a version control system
     git is free software
       tianyaming
        add a new line
            add a new line "  my boss is stupid"
    root@kali:/opt/learnGit# git commit -m "have use the git checkout"

    [master 26aa3fd] have use the git checkout
     1 file changed, 1 insertion(+)
    root@kali:/opt/learnGit#
    root@kali:/opt/learnGit# cat readme.txt
    readme here
    learn github git is a version control system
     git is free software
       tianyaming
        add a new line
            add a new line "  my boss is stupid"
    root@kali:/opt/learnGit# git checkout -- readme.txt
    root@kali:/opt/learnGit# cat readme.txt
    readme here
    learn github git is a version control system
     git is free software
       tianyaming
        add a new line
            add a new line "  my boss is stupid"
    root@kali:/opt/learnGit#
    如果使用了git add提交了暂存区,庆幸的是你么有使用commit提交  ,可以使用 git reset HEAD 《file》来回退  之后在使用 git checkout清除工作区

    来一个总结  ,场景一:当你改乱了工作区的某哟个内容,想直接丢掉工作区使用   git checkout -- file    ,场景二:当你改乱了某一个文件的内容,还添加到了暂存区,想丢弃修改,第一步使用 git reset HEAD  file 回到场景一 ,之后在使用 git checkout --file 丢掉

    git 中还有一种操作就是删除文件:

    先添加一个新的文件   test.txt  之后使用 git add   、git  commit 提交 到版本控制库

    之后使用rm 命令删除文件  test ,删除之后版本库中的并没有删除,所以使用  命令   git rm test 删除版本库 之后使用 git commit 提交版本库  (注:git checkout 的作用就是用版本库替换工作区版本)

    远程仓库的操作

     首先就是在本地使用ssh创建密钥对,  才用户仓库目录下面看看,有没有 .ssh 目录  ,如果有在看下面有木有id_rsa和 id_rsa.pub两个文件,如果存在直接跳转下一步

     

    使用 ssh 创建 邮箱GitHub账户的秘钥对  命令:  ssh-keygen -t rsa -C " 1214tian@sina.com"   之后会在用户占下面产生秘钥对,复制 公钥到GitHub上

    现在我们需要将我们的本地仓库和GitHub上的仓库关联起来,首先登陆GitHub账户创建以个git仓库 learnGit

    现在将本地仓库关联到GitHub上,使用命令:   git remote add origin git@github.com:SueKayTian/learnGit.git

    关联之后将本地仓库的文件全部推送的远程GitHub上 使用命令  :   git push -u origin master

    本地内容推送到远程,实际上是将当前分支master推送到远程, 由于远程是空的,我们第一次推送的master的时候,加上了参数 -u, 这样GIt 不但会将本地的master分支内容推送到远程master分支,还会将本地的master和远程的master关联起来,在以后的推送和拉取中简化命令

    第一次关联后推送的时候会弹出SSH警告 ,在这之后只要本地做了提交就可以使用  git  push origin master 来推送

      分支管理:

      创建一个分支使用命令:   git checkout -b (分支名字)

    git checkout 命令后面加上-b 参数表示创建并切换,相当于下面的命令  :

     git branch dev

    git checkout dev

    之后使用git branch命令查看列出所有分支,当前的分支结构后面会显示一个 * 

    那么如何将 dev 的工作合并到master上面, 下面使用命令 将 dev 合并到master 分支上面,  git merge命令用于价格制定分支合并到当前分支下面,  合并之后就可以放心的删除之前的 Dev 分支

    小结:

       查看分支 使用命令:  git  branch

      创建分支:  git branch <name>

      切换分支:  git  checkout <name>

     创建加上切换分支 : git checkout -b <nmae>

      合并分支  : git merge <name>

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

    解决冲突问题: 其实很多时候在合并的时候会出现冲突,该如何解决了  ?

    首先我们创建一个分支并迁移到当前分支之下, 

    git  自动提示我们当前master分支比远程的master分支超前一个提交。这时我们在当前master分支下修改 readme文件 ,现在 master和 featurel上都有了自己的型的提交。

    这种情况下git无法进行快速的会合并,只能视图将各自的修改合并,但是会出现冲突

     当git无法自动合并分支的时候 ,就必须首先解决冲突问题,提提交在合并。结局冲突的办法就是使用手动编辑的方法合并成我们想要的内容,再次提交  可以使用  命令 git log --graph 查看分支合并图

     通常合并分支时,会丢掉分支信息,如果可能Git 使用 fast forward模式,但是在这种模式下,删除分支之后,要强制禁止使用Fast foward模式, Git就会在merge时生成一个新的commit,,这样 从分支历史上就可以看出分支信息

     下面使用 --no-ff 方式的git merge 测试

    首先创建并切换到 Dev分支下面:   使用命令 : git checkout -b dev 

    之后修改 readme文件 并提交到当前分支下,

    合并的时候命令:   git merge --no-ff -m "merge with no-ff "dev   

    之后使用日志记录来查看修改的历史 : 使用吗命令: git log --graph --pretty=oneline --abbrev-commit

    在实际的开发中,我们应该按照几个基本的原则进行分支管理,首先master是非常稳健的分支,仅仅能用来发布新的版本,平时干活的时候不能再上面干活。干活都是在类似Dev的分支上开发,之后再将Dev版本合并发哦master分支上面。每个人都有自己的分支,时不时合并到Dev分支上面。

     bug 如何修复,

    当你接到一个代号为010的bug任务的时候,很自然的你会想创建一个issue-010来修复,但是如果当前正在Dev上进行的工作还没有提交,这个时候可以利用 stash功能,可以将当前的工作线程隐藏起来,等到以后恢复现场后继续工作。

    使用 命令 : git stash 

    Feature功能
    在软件开的过程中总有很多功能会不断地被添加进来 ,添加一个新的功能的时候因为不希望一些实验性质的代码,把主分支搞乱了,所以,每添加一个新的 功能,最好新建有个feature分支,在上面开发,完成后,再进行合并,最后删除feature分支,

  • 相关阅读:
    POJ 1887 Testing the CATCHER
    HDU 3374 String Problem
    HDU 2609 How many
    POJ 1509 Glass Beads
    POJ 1458 Common Subsequence
    POJ 1159 Palindrome
    POJ 1056 IMMEDIATE DECODABILITY
    POJ 3080 Blue Jeans
    POJ 1200 Crazy Search
    软件体系结构的艺术阅读笔记1
  • 原文地址:https://www.cnblogs.com/xinxianquan/p/10989828.html
Copyright © 2011-2022 走看看