Git笔记整理

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

集中式和分布式的版本控制不一样git

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

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

    git在不一样系统上的安装,自行百度。(我如今以为Kali 系统作的愈来愈好了,以前在物理机上安装的时候兼容性不是很好) 网络

   git - config 命令的 --config 参数,表示这台机器上的全部的仓库都使用这个配置,固然也能够对某个仓库指定不一样的用户名和Email并发

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

注: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分支,

相关文章
相关标签/搜索