其他分享
首页 > 其他分享> > git的一些简单知识

git的一些简单知识

作者:互联网

git

起步

为什么要使用版本控制

当我们在工作的时候,通过很多次迭代对当前文档工作进行优化.这个过程是一个反复修改的过程,我们需要回到之前的某次修改.这个时候我们就希望有一个工具能够把每次修改的状态记录下来.

版本控制系统

git历史

linux内核开发小组在开发和维护linux的时候,需要有大量的功能,补丁开发.最开始的时候linux内核开发小组是和bitKeeper合作实现版本控制的.
2005年合作到期,BitKeeper收回了使用权限,然后linux决定自己开发一个版本控制系统,需要有一下需求:

  1. 速度
    2.大量分支
    3.设计简单
    4.完全分布式
    5.有能力支持linux这样的大型系统.

然后git就出现了.

git基础

git记录的是快照,而不是差异比较.

git的版本每个版本都是记录了当前版本中文件修改的信息,为了减少记录文件的大小,只会将修改的文件版本记录下来,而没有修改的部分会指向之前的版本.

git基本都在本地修改

git的修改都是在本地实现的.即使在没有网络的情况下也能够完全工作,同时在有网络的时候将修改推送到远端.

git保证完整性

git使用了文件校验和来最终当前文件的变更情况来保证数据完整性

git一般值添加,不修改

git对于数据的删除和修改等操作都是添加,用后面的版本覆盖之前的版本,而不是修改之前的内容.除非有特殊操作.

git的三种状态

提交状态 ; 修改状态 ; 暂存状态

git 基础

git基础中包括配置并初始化仓库,开始或停止跟踪文件,暂存或提交更改.配置git忽略某些文件,如何迅速而简单的撤销某些错误操作,如何查询项目的历史版本和不同提交之间的差异,如果向远端仓库推送或者拉去文件.

git仓库

git仓库的方式有两种:一种是自己创建一个git仓库,还有一个种是从远端clone一个仓库下来.

记录文件的状态

文件的状态有未追踪(??),缓存(A),已修改(M),未修改.

查看当前文件夹和暂存区的差异

查看还没有add的文件的内容

git diff

git diff 当前文件夹中还未提交文件的差异.

git diff --staged

git diff --staged 表示当前已经在暂存区中存放的内容

提交修改

将当前暂存区的文件内容提交到提交区中.

git commit -m "commit message"

如果当前文件夹中有未提交的内容,一般需要 add +commit的命令.可以合并为一条

git commit -am "coimmit message"

删除文件

删除文件,同时删除对一个的记录.本地的记录会被遗弃删除

git rm filepath

删除日志,但是不删除本机文件.当前文件变成为最终状态

git rm --cached filepath

移动文件

git mv sourcePath toPath

这条指令相当于三条

mv sourcePath toPath
git rm sourcePath
git add toPath

查看修改日志

git log -p --stat

git 查看日志中包括多种参数,具体如下:

-p 按补丁格式显示每个更新之间的差异。
--stat 显示每次更新的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--graph 显示 ASCII 图形表示的分支合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline short,full,fuller 和 format(后跟指定格式)。

git log添加其他限制条件

可以添加限制最近几周的,
也可以添加到什么时间为止的等.

修改提交信息

git commit 的时候,觉得文件提交的不太行.这个时候希望做一些修改,但是只能修改最近的一条.
git commit --amend

这样能够上一条提交记录.

放弃当前某个文件的修改

git checkout -- fileName

如果 fileName=.的时候,会清空整个空间.
这个指令是需要慎重的指令.

远端仓库

git remote -v

查看当前本地仓库关联的所有远端仓库的名称和地址

git remote add shortName url

将本地长裤和远端仓库关联起来.

git fetch shortName

从远端仓库中,上一次fetch后的所有提交的内容都拉取到本地起来.

git push shortName branch-name

将本地的修改推送到远端

git remote show shortName

这样能看到远端仓库更多的信息.

git的标签

标签是用来对某一次提交的副本做一个特殊的标记,表示重要.

git tag

这个命令能够显示出所有标签.
如果想要对标签进行筛选过滤 可以加上 -l添加

git tag -l 'info'

git tag -d tagname

分支

几乎所有的VCS系统都支持分支,分支能够让我们的工作和主分支分离出来,当工作测地完成,然后合并到主分支上去.
git的分支的实现非常高效,每次的修改值需要消耗很轻量资源,git的分支是其杀手级特性.

分支简介:

  git的每一次提交commit都会生成一个提交对象.这个提交对象中会记录:修改的文件,修改人的信息,以及指向其前置提交对象的指针列表.
  分支是一个指向提交对象的特殊指针,当提交的时候,分支名会指向最新提交的那个提交对象.且分支指针在提交操作的时候,自动向前移动.

分支创建

git branch branchName

  表示创建了一个新分支名,分支名指向了当前分支名指向的提交节点.同时Head已让指向了当前分支,并不变化.
  git中创建一个新分支,并不会将源分支copy一遍,而是只是创建一个新的指向缘由分支指针的文件,并向其中添加一个校验和.所以速度非常快.所以git鼓励人们创建新的分支.

分支切换

git checkout branchName

  切换到一个新的分支,head指向了新分支指向的提交对象,同时在老分支的暂存区和未提交的部分不变,如果这个时候我们进行提交的的话,会提交到新分支上去.老分支的分支名不会指向新的提交.
  我们在暂存区中有内容,如果我们在切换的时候,源分支和目的分支指向了相同提交对象,这个时候是能够切换的,如果指向了不同的提交对象,这个时候切换会被拒绝.

删除分支

  当一个分支使用完毕,且有master分支指向了旧的分支.这个时候需要删除分支

git branch -d branchName

创建并切换分支

将 创建和切换分支合并起来的一条命令

git checkout -b branchname

  当前命令表示从当前分支切换出一条新的分支,同时head指向新的分支.

合并分支

   将另外一个分支合并到当前分支.其中标识从共同的祖先节点开始,到两个分支指向的提交对象的路径上的所有的快照版本合并在一起,生成一个新的提交对象.这个系统作为当前分支指向的新的提交对象.

git merge otherBranchName
  

合并冲突

   当合并的两个branch指向的快照副本有有对相同行做了修改的时候,这个时候没有办法自动合并.就会报出冲突.我们需要解决这个冲突.
解决冲突的方式一定需要使用图形化工具来帮助解决从图.

分支管理

  每一个分支都是一个指向某个提价对象的指针,有的时候我们想看一下当前仓库中有多少分支,同时又多少合并到了master中,有多少没有合并到master分支.对于合并了的分支,我们可以删除.

git branch //列出当前仓库中所有的分支
git branch -v //显示分支同时,显示最后一次提交信息
git branch --mreged //显示所有已经合并到master的分支,同时可以删除这些分支
git branch --no-merged //显示所有还没有合并到master分支

远端分支

git branch -a

   查看当前仓库中的所有分支,其中会有一些remote/branchName表示远端仓库的分支,并没有和本地关联.

git fetch shortName

   我们适用 git fetch 命令将远端仓库上一次fetch后到当前所有的提交副本都获取下来.

git push shortName branchname

   将本地的修改推送到远端分支上去.这个过程中,我们最好先将远端分支copy下来,然后讲 remote/branch merge进当前分支中并解冲突.然后将本地的修改推动到远端,并合并进remote/branch中去.

git checkout -b branchName remote/branch 生成一个本地分支和远端分支关联起来

git checkout --track remote/branchname

   这里会在本地生成一个 branchName的关联分支

git branch -u remote/branchName

  适用 git branch -u 将当前的分支和远端的分支关联起来.

git branch -vv

   查看当前仓库中,本地分支和远端分支关联关系.

变基(rebase)

   当我们希望将两个版本合并起来,同时又不希望看到其中的变更历史的时候,这个时候,我们就使用rebase
   rebase命令一定不要使用在当前仓库已经有了其他副本的情况下.就是没有写作的情况下适用.否则会出现冲突,解决起来非常麻烦

rebase能够合并commit对象.同时也能调整各个分支的commit对象.

内容缓存

当我们在工作区中工作了一般,需要切换出去,干其他的事情,这些内容也没有到commit的实现,这个时候,我们需要做的事情是将当前的工作区的内容暂时存起来,然后切换到其他分支去干活

git stash save "stashinfo"

将工作区和暂存区的内容缓存到缓冲区中.

示例如下stash@{0}: On master: dev 分支的 stash以冒号分隔,其中第一个为index,第二个为分支,第三个为之前存储的时候的saveinfo.后面在获取某一个指定stash的时候会使用到

git stash pop stash@{rank} --index

从缓存区中回复到当前工作空间中国.其中需要核对一下对应的分支,如果回复的分支和存储时的分支不一致的话可能会导致错乱.

标签:文件,git,仓库,知识,提交,简单,远端,分支
来源: https://www.cnblogs.com/xxuuzz/p/16339121.html