您的位置:首页 > 其它

git基础流程梳理及git常见命令说明

2019-03-15 23:39 183 查看
版权声明:转载请注明出处 https://blog.csdn.net/qq_39969226/article/details/88586855

git基础流程梳理及git常见命令说明

——Git 的工作就是创建和保存你的项目的快照及与之后的快照进行对比

git介绍、及其git安装

Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 [1] Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git版本控制软件:分布式版本控制软件(有多个版本库)

再细看某个git:

暂存区的作用,是为了减少版本号。
假设我们频繁提交100个版本,就会有100个版本号在版本库中。有了暂存区后,我们可以每次达到10个再提交一次到版本库中,从而减少了版本号。
git add 将本地文件增加到暂存区中
git commit将暂存区的内容提交到本地仓库(本地分支,默认master分支)
git push将本地仓库的内容推送到远程仓库(远程分支)
git pull将远程仓库的内容拉取到本地仓库

下载地址https://git-scm.com/
安装:一路默认即可
配置path:bin(进入git安装目录的bin目录,然后copy地址,然后添加到环境变量path中)

一. git 基础流程:

  1. 配置自己的git:右键git bash ,配置本地的用户名和邮箱:(作为唯一标识符)
git config --global user.name "用户名"
git config --global user.email "邮箱"

查看是否配置成功,进入c盘-》“用户”文件夹-》users用户文件夹-》“.gitconfig”文件,打开它就能看见你刚刚配置过的信息。

  1. 搭建git服务器(远程仓库):有统一的托管网站:https://github.com/ ,里面托管了很多优秀的项目。先去这个网站去注册账号。
  2. 免密钥登录:2者访问不要密码了.ssh:本地与远程关联(2台计算机关联)
  • 配置ssh:先在本地配置,然后发送给远程
    先在本地生成ssh:在git bash中:ssh-keygen -t rsa -C 邮箱 (其中rsa是加密算法的意思,一路回车即可)
    然后根据git bash中显示的路径,在电脑本机上找到该路径,比如我这里的c/Users/10991/.ssh,打开该文件会看见如下图所示的2个文件:

  • 然后发送给远程: github->右上角您的用户头像旁的倒三角->Settings->SSH and GPG keys->New SSH->title任意,key中输入刚才在本地生成的ssh(id_rsa.pub文件),打开该文件的内容并复制粘贴到此处。





    注意:粘贴后,光标会移动新的空行,代表回车,应删除这个回车。
    然后Add SSH key.

  • 测试连通性: (即检测本地和远程到底能不能通信)

ssh -T git@github.com
(统一写法)

然后,回车看见如下图所示,successful,且在本地的.ssh文件中,还会生成一个known_hosts文件(有这个文件即表示远程能够识别我们了,本地和远程能够通信了)


如果失败:
多试几次,因为远程的github网站可能不太稳定或你的网络原因。如果还不行,就检查创建SSH粘贴里面有没有回车符和空格符。

注意: git bash中用ctrl+v是没用的,直接在bash中右键选择"Past"进行粘贴。

  1. 准备工作做好后,就开始在本地新建git项目,并发送给远程(本地一个项目,远程一个项目,然后将二者关联即可)。

  • 本地新建git项目:
    在进入该项目,右键git bash,输入git init(初始化),然后在项目中,我们会看到生成一个 .git 的文件(隐藏文件,需要设置显示隐藏文件才能看见它),这标志着我们的项目现在已经是git项目了。
  • 在远程建立一个项目:
    new-新建项目-生成https://github.com/LeiLeiOfJava/java-.git(我这个项目的https/ssh)


  • 本地项目-远程项目关联:
    在git bush 中输入如下命令进行关联

git remote add origin 你的github项目的https/SSH

  1. 本地与远程项目间的交互:
  • 第一次发布项目(本地项目-远程项目)

git add . (文件-》暂存区) 【add .表示添加当前项目的所有文件,也可以自己指定添加某个特定的文件:git add 文件名】
git commit -m “注释内容” (暂存区-》本地分支/版本库(默认master))
git push -u origin master 【第一次提交和后期经常提交不太一样】


报错的话,请检查您的单词拼写是否正确!

  1. 验证:
    github上,打开你的主页,即可查看,比如我这里的

  2. 第一次下载项目(远程项目-本地项目) :
    在github上,找一个项目,git clone 项目的HTTPS/SSH
    例如,我这里找了okhttp的项目,在你想要保存的文件下,右键git bash打开,然后

git clone 项目的ssh/https



8. 第一次git push后,以后的提交和更新操作:

  • 提交(本地-》远程):
    在当前工作目录:

git add .
git commit -m “提交到分支”
git push origin master (与第一次提交不同,不再用-u)

原项目:


然后刷新哈远程github上的项目,查看更新了提交的文件了。

  • 更新(远程到本地)

git pull

先在github上的项目上修改:

然后 git pull命令:

再打开提交.txt:

二. git常见命令及其说明:

  • 差异分析工具:

git config --global merge.tool vimdiff

  • git config --list

查看配置信息:要检查已有的配置信息:
有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个。这些配置我们也可以在 ~/.gitconfig 或 /etc/gitconfig 看到

直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可

  • git status

命令用于查看项目的当前状态。会出现AM 、A:“AM” 状态的意思是,这个文件在我们将它添加到缓存之后又有改动。

  • git status -s

git status 以查看在你上次提交之后是否有修改。该命令加了 -s 参数,以获得简短的结果输出。如果没加该参数会详细输出内容:

  • git diff

执行 git diff 来查看执行 git status 的结果的详细信息。
git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。git diff 有两个主要的应用场景
尚未缓存的改动:git diff
查看已缓存的改动: git diff --cached
查看已缓存的与未缓存的所有改动:git diff HEAD
显示摘要而非整个 diff:git diff --stat

git status 显示你上次提交更新后的更改或者写入缓存的改动, 而 git diff 一行一行地显示这些改动具体是啥。

  • git rm

如果只是简单地从工作目录中手工删除文件,运行 git status 时就会在 Changes not staged for commit 的提示。要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除,然后提交。可以用以下命令完成此项工作
git rm <file>
如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f:
git rm -f <file>
如果把文件从暂存区域移除,但仍然希望保留在当前工作目录中,换句话说,仅是从跟踪清单中删除,使用 --cached 选项即可:
git rm --cached <file>

  • git rm –r *

可以递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件.进入某个目录中,执行此语句,会删除该目录下的所有文件和子目录。

  • git mv

git mv 命令用于移动或重命名一个文件、目录、软连接。
例如重命名:
git mv README README.md

三. 了解工作区、暂存区和版本库:

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

  • 图中左侧为工作区,右侧为版本库。在版本库中标记为 “index” 的区域是暂存区(stage, index),标记为 “master” 的是 master 分支所代表的目录树。

  • 图中我们可以看出此时 “HEAD” 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

  • 图中的 objects 标识的区域为 Git 的对象库,实际位于 “.git/objects” 目录下,里面包含了创建的各种对象及内容。

  • 当对工作区修改(或新增)的文件执行 “git add” 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

  • 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

  • 当执行 “git reset HEAD” 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

  • 当执行 “git rm --cached <file>” 命令时,会直接从暂存区删除文件,工作区则不做出改变。

  • 当执行 “git checkout .” 或者 “git checkout – <file>” 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。

  • 当执行 “git checkout HEAD .” 或者 “git checkout HEAD <file>” 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

四. Git工作流程:

一般工作流程如下:

  • 克隆 Git 资源作为工作目录。
  • 在克隆的资源上添加或修改文件。
  • 如果其他人修改了,你可以更新资源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

五. git分支管理:

几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

  • git branch (branchname)

创建分支命令

  • git checkout (branchname)

切换分支命令

  • git merge

当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。可以多次合并到统一分支, 也可以选择在合并之后直接删除被并入的分支。

  • git branch

列出分支,没有参数时,git branch 会列出你在本地的分支。有一个叫做"master"的分支,并且该分支是当前分支。当你执行 git init 的时候,缺省情况下 Git 就会为你创建"master"分支。
如果我们要手动创建一个分支。执行 git branch (branchname) 即可。以此方式在上次提交更新之后创建了新分支,如果后来又有更新提交, 然后又切换到了"testing"分支,Git 将还原你的工作目录到你创建分支时候的样子

  • git branch -d (branchname)

删除分支

  • git merge

一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支。 你可以使用以下命令将任何分支合并到当前分支中去。

  • git branch、cat test.txt

合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改。一个合并冲突就出现了,接下来我们需要手动去修改它。 在 Git 中,我们可以用 git add 要告诉 Git 文件冲突已经解决

六. git查看提交历史:

在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看。

  • 使用 git log 命令列出历史提交记录
  • –oneline 选项来查看历史记录的简洁的版本。告诉我们的是,此项目的开发历史
  • git log --oneline --graph:查看历史中什么时候出现了分支、合并。以下为相同的命令,开启了拓扑图选项
  • git log --reverse --oneline:可以更清楚明了地看到何时工作分叉、又何时归并。用 '–reverse’参数来逆向显示所有日志。
  • git log --author:只想查找指定用户的提交日志
  • git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges:要指定日期,可以执行几个选项:–since 和 --before,但是你也可以用 --until 和 --after。 --no-merges 选项以隐藏合并提交

总结:
GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征。

Git 与 SVN 区别点:

  • GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。

  • GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。

  • GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。

  • GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。

  • GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

git commit、git push、git pull、 git fetch、git merge 的含义与区别:

  • git commit:是将本地修改过的文件提交到本地库中;
  • git push:是将本地库中的最新信息发送给远程库;
  • git pull:是从远程获取最新版本到本地,并自动merge;
  • git fetch:是从远程获取最新版本到本地,不会自动merge;
  • git merge:是用于从指定的commit(s)合并到当前分支,用来合并两个分支;
  • $ git merge -b // 指将 b 分支合并到当前分支
  • git pull 相当于 git fetch + git merge。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: