git基础介绍与GitKraken操作简记

刚开始尝试使用git的时候,简直是被弄得生不如死啊,写了半天的代码一下子被删了,那时候的心情简直想SHI,后来没办法,抽了点时间学习了一下git的原理,其实就是你的文件现在到底在什么状态,这么一个问题,由于只是了解,所以不知道具体的操作,具体操作还是需要GitKraken这个GUI工具来实现。

git 部分

使用git管理版本的文件在本地会有下面三个过程:

  • 已修改(modified):就是你修改了在git管理下的文件
  • 已暂存(staged):就是将你修改的文件放在缓存区中,等待处理
  • 已提交(committed):就是在你的本地确定了你这次保存在缓冲区中的文件与上一次committed的文件一起,为一个版本,这里先不要考虑远程的情况,到此为止,本地能完成的事情已经完成了。

注意上面的英文,因为在一些版本管理软件的GUI界面中就会显示这些的,所以注意一下。

GitKraken

上面讲的这些状态都在GitKraken的最右边部分有显示:

git基础介绍与GitKraken操作简记_第1张图片

从上到下分别是modified、staged、commit。

远程

本地基本不怎么会被作死,但是远程,特别是使用命令行来操作远程的时候,加上分支,分分钟想SHI。。。。。。

回到原题,这里也先介绍一些基础知识,注意其中各部分的默认名称,在不熟悉git命令的情况下会经常看见这些默认名称。

  • 远程仓库:默认是origin,就是托管你代码的远程服务器
  • 分支:就是同一仓库下不同的房间,比如同一个软件,可能有稳定版,最新体验版,那么稳定版的维护就需要一个Stable分支,最新体验版就有一个Develop分支,分支可以合并,这个下面再说。 默认的分支名,也就是在创建仓库时的那个主分支叫:master。
  • 提交(push):提交,就是将你本地的修改提交到远程仓库中去,但是试想,git是否是全盘接受你的提交呢?当然不可能,会存在冲突的情况。什么冲突呢?举下面这个例子:

//原始版本,就是保存在你远程仓库中的部分:
public function showName(){
    return 'hello world';
}
//新版本,就是你本次committed的内容:
public function showName(){
    return 'hello php';
}

你没有在原始的内容上添加,而是做了修改,这个时候,git要选择保存哪一个版本?最新的版本?git会抛出错误,显示无法push,然后让你选择要保存哪一个版本,选择好后再push。但是这个时候又有一个问题,别人在远程更新了Develop(假设你也在Develop分支),这个时候请问你想push的话会怎么样呢?这个时候最保险的做法是:先pull,再push。如果你使用GitKraken的话,那么他会自动更新远程跟踪分支,如果你在这种情况下push,那么他会问你是强制push,还是先pull,再push,当然,前提是pull没有冲突。


  • 远程跟踪分支:简单点来说就是书签,当你在本地完成代码工作的时候,可能别人也修改了远程Develop分支,并且push了,那么他的版本就要比你的更新,这个时候,记录远程版本的版本号的一个东西就叫做远程跟踪分支,更新远程跟踪分支可以使用git fetch命令。
  • 拉取远程 pull:每次你想更新本地的代码,使本地的代码与远程的一致,那么就需要pull。如果本地代码与远程代码有冲突的话,那么就需要修改本地代码,然后保证与远程不冲突为止,至于如何修改,我现在也不会,这次就先暂时记这么一点吧。


这里是我后面新建的内容,主要是描述git命令,虽然GUI界面很好,但是我还是喜欢敲命令行,总感觉很屌。

git命令

先来说两个常量:

origin是默认的仓库名,master是默认的分支名,注意这两者的差别以及其含义,接下来的命令中经常会看见这两个家伙。

复制代码部分

git clone $url

这里的$url就是一般给的github超链接

git remote

查看远程仓库名,注意是仓库名,不是分支名,一般情况下是origin

git remote add 新仓库名 默认原始仓库地址

这里写图片描述

原来使用git remote查看的时候只看到一个远程仓库origin,现在使用git remote add之后就新建了一个newRepetory的新仓库。

这里再加几个相关的操作命令:

重命名远程仓库

git remote rename origin_name new_name

删除远程仓库

git remote rm repetoryName

提交代码

git status

查看是否还有修改过,但是没有commited的文件,下面分别演示有和没有的显示情况:

git基础介绍与GitKraken操作简记_第2张图片

git diff

查看修改的内容,可以加文件名或者不加。

git基础介绍与GitKraken操作简记_第3张图片

git add 文件名

将文件添加到Staged状态,就是缓存起来,但是还有没有commit。

git commit -m ‘修改原因’

将staged文件(就是git add)之后的文件,commit。

git pull 远程仓库名 本地分支名

远程仓库默认是origin

这里穿插一点,如果有矛盾的话,则使用git add 冲突文件文件名,会在冲突部分显示特殊情况,具体的可能需要百度了,我本来想演示的,结果发现我居然还没有弄懂。。。。。。。

下面是一个额外的发现:


未冲突前原始文件

这里写图片描述


在github官网将文件内容进行修改

git基础介绍与GitKraken操作简记_第4张图片


接着我再在本地的文件中新增加内容:

这里写图片描述


接着使用git pull 命令,就可以看见冲突了。

git基础介绍与GitKraken操作简记_第5张图片

麻烦了这么久,就是为了看到这么一个冲突,心好类。注意看这里的冲突显示部分:

<<<<<<< HEAD
我是本地原始文件内容

这里是未起冲突,并且新添加的部分
=======
我是本地原始文件内容,其实只要git push之前,本地落后远程,则会显示错误。

HEAD部分表示本地的原始内容,而==============下面的则是远程的内容(后来出了一点状况,所以与上面的图片显示有点出入),接着你要干的事情就是解决这个冲突了。

至于如何解决这个冲突,我倒还真没怎么尝试过,因为之前一直在学git的命令,自己一个人编程,也很少遇到过冲突的情况,所以这个可能还需要额外学习吧,这里先是介绍原理。

上面我们知道,我们创建冲突的方式是:

  • 在远程仓库直接修改了我们的代码
  • 在本地同时进行了修改,使git在同步远程仓库时出现错误,其实这里就是在同一文件的同一位置,出现了不同的内容,git需要你来选择,针对这种情况,你要怎么办?两个版本,你留哪一个?

假设这里我们就要保留本地最新修改的,就是HEAD后面的部分。

那么我们就只要把git添加的删除掉:

<<<<<<< HEAD 删除掉这一行
我是本地原始文件内容

这里是未起冲突,并且新添加的部分
======= 删除掉这一行
我是本地原始文件内容,其实只要git push之前,本地落后远程,则会显示错误。 删除掉这一行

之后再使用git push,就可以将本地的修改同步到远端仓库了。

最后解决冲突后结果:

git基础介绍与GitKraken操作简记_第6张图片

这里介绍一个可能是错误的观点,但是这个观点很重要,因为它可以一瞬之间毁掉你写了半天的代码:

git好像是使用版本进行判断的,如果你的版本落后远程,则需要先进行git pull来同步,如果有冲突,无论你解没解决,之后你运行:

  • git pull 的话,则会将最新版本的代码复制到你本地,同时!!!不会保留你还有没有git push的代码
  • git push 这个时候,git默认你已经作出了选择,无论这个选择你是队的还是错误的,git所执行的操作就是把你的本地文件,同步到远程去,原封不动哦。即使其中还保留着起冲突时加在文件内部的:

    <<<<<<< HEAD

    ============

这样的内容。所以在你不熟悉git的情况下,推荐使用GUI软件,否则你真的很有可能给别人造成很多麻烦。

git push 远程仓库名 HEAD:本地分支名

提示是要我用这样的结构,不过每次写起来好麻烦啊,如果能正确执行,则会让你输入用户名和密码。验证都通过之后就会将本地的修改同步到远端了。

如果本地版本落后远端版本,则会提示错误,就要先运行git pull,解决完冲突,或者没有冲突之后,再来git push。

远程仓库操作命令

git remote show 远程仓库名字

查看远程仓库具体信息

git remote update

更新本地关于远程仓库的信息

git fetch

git pull 的第一步,省略了合并(merge)的过程。可以说:

git pull = git fetch + git merge

git checkout 仓库名/分支名

切换分支

git log

查看历史提交记录

git reset 版本号的哈希值

这个好像还有点问题。我再试试。

你可能感兴趣的:(git)