Git 命令常用使用记录

一、分布式版本控制

分布式版本控制系统(Distributed Version Control System,简称 DVCS),在这类系统中,像 Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

二、Git的特性

1. 直接记录快照,而非差异比较
Git把数据看作是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。 为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 快照流。

2. 近乎所有操作都是本地执行
在 Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。本地磁盘上就有项目的完整历史,所以大部分操作看起来瞬间完成。
要浏览项目的历史,Git 不需外连到服务器去获取历史,然后再显示出来——它只需直接从本地数据库中读取。 你能立即看到项目历史。 如果你想查看当前版本与一个月前的版本之间引入的修改,Git 会查找到一个月前的文件做一次本地的差异计算,而不是由远程服务器处理或从远程服务器拉回旧版本文件再来本地处理。

3. Git 保证完整性
Git 中所有数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。 这个功能建构在 Git 底层,是构成 Git 哲学不可或缺的部分。 若你在传送过程中丢失信息或损坏文件,Git 就能发现。
Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串,基于 Git 中文件的内容或目录结构计算出来。 SHA-1 哈希看起来是这样:24b9da6552252987aa493b52f8696cd6d3b00373
Git 中使用这种哈希值的情况很多,你将经常看到这种哈希值。 实际上,Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。

4. Git 一般只添加数据
你执行的 Git 操作,几乎只往 Git 数据库中增加数据。 很难让 Git 执行任何不可逆操作,或者让它以任何方式清除数据。 同别的 VCS 一样,未提交更新时有可能丢失或弄乱修改的内容;但是一旦你提交快照到 Git 中,就难以再丢失数据,特别是如果你定期的推送数据库到其它仓库的话。

三、Git的三大状态

  1. 已提交(committed):数据已经安全的保存在本地数据库中。
  2. 已修改(modified):修改了文件,但还没保存到数据库中。
  3. 已暂存(staged):对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

四、Git 项目的三个工作区域的概念

  1. Git 仓库: Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
  2. 工作目录:是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
  3. 暂存区域:是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作`‘索引’’,不过一般说法还是叫暂存区域。

这里写图片描述

基本的 Git 工作流程如下:

  1. 在工作目录中修改文件。
  2. 暂存文件,将文件的快照放入暂存区域。
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

工作目录下文件的两种状态

  1. 已跟踪:是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区。
  2. 未跟踪:工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。

初次克隆某个仓库时,工作目录中的所有文件都属于已跟踪文件,未修改状态。

五、git常用基本命令

1.获取配置信息列表

$ git config --list

2.查看指定key值的配置的信息 $ git config key

扫描二维码关注公众号,回复: 3252494 查看本文章
$ git config user.name

3.设置用户信息

$ git config --global user.name "shzhang7"

4.在现有目录中初始化仓库

$ git init

5.克隆现有的仓库

$ git clone 仓库地址
$ git clone 仓库地址 本地项目名称

Git 支持多种数据传输协议。 上面的例子使用的是 https:// 协议,不过你也可以使用 git:// 协议或者使用 SSH 传输协议,比如 user@server:path/to/repo.git 。

6.检查当前文件状态

$ git status
$ git status -s
     M README
    MM Rakefile
    A  lib/git.rb
    M  lib/simplegit.rb
    ?? LICENSE.txt

新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记。 你可能注意到了 M 有两个可以出现的位置,出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M 表示该文件被修改了并放入了暂存区。

7.忽略文件

$ cat .gitignore 

8.将文件添加到暂存区

$ git add  src/main/java/com/jxutcm/animal/commons/RepResultData.java
$ git add .

9.移除暂存区添加的文件

$ git rm --cached  文件url
$ git rm --cached  pom.xml

10.查看已暂存和未暂存的修改

$ git diff
$ git diff --cached

11.提交更新

$ git commit -m "提交备注信息"
$ git commit -a -m "提交所有暂存区的文件的备注"

12.查看提交历史

$ git log
$ git log -p -2  一个常用的选项是 -p,用来显示每次提交的内容差异。 你也可以加上 -2 来仅显示最近两次提交
$ git log --pretty=format:"%H-%an-%s"   引号里为查看的内容的信息的格式
$ git log --pretty=format:"%h %an %s" --graph  可以查看分支合并的信息

六、Git远程仓库

远程仓库是指托管在因特网或其他网络中的你的项目的版本库。 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读写。 与他人协作涉及管理远程仓库以及根据需要推送或拉取数据。 管理远程仓库包括了解如何添加远程仓库、移除无效的远程仓库、管理不同的远程分支并定义它们是否被跟踪等等。

1.查看远程仓库的信息

$ git remot   查看远程仓库
$ git remote -v   显示需要读写远程仓库使用的 Git 保存的简写与其对应的 URL

2.推送到远程仓库

$ git push origin master  
只有当你有所克隆服务器的写入权限,
并且之前没有人推送过时,这条命令才能生效。 
当你和其他人在同一时间克隆,他们先推送到上游然后你再推送到上游,
你的推送就会毫无疑问地被拒绝。 
你必须先将他们的工作拉取下来并将其合并进你的工作后才能推送。

3.查看远程仓库

$ git remote show origin

七、Git标签

像其他版本控制系统(VCS)一样,Git 可以给历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 等等)。
Git 使用两种主要类型的标签
- 轻量标签(lightweight):一个轻量标签很像一个不会改变的分支 - 它只是一个特定提交的引用。
- 附注标签(annotated):附注标签是存储在 Git 数据库中的一个完整对象。 它们是可以被校验的;其中包含打标签者的名字、电子邮件地址、日期时间;还有一个标签信息;并且可以使用 GNU Privacy Guard (GPG)签名与验证。 通常建议创建附注标签,这样你可以拥有以上所有信息;但是如果你只是想用一个临时的标签,或者因为某些原因不想要保存那些信息,轻量标签也是可用的。

1.查看tag列表

$ git tag
$ git tag -l 'v1.8.5*'    只查看1.8.5开头系列的所有tag

2.本地打标签

$ git tag v1.0    v1.0tag名称
$ git tag -a v1.0 -m 'my version 1.4'   带有备注信息的tag
$ git tag -a v1.2 9fceb02   对过去提交的版本号打标签9fceb02为版本号

3.共享标签(将标签推送到远程)
默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。 这个过程就像共享远程分支一样 - 你可以运行 git push origin [tagname]。 标签一旦推送 -》当其他人从仓库中克隆或拉取,他们也能得到你的那些标签。

$ git push origin v1.0
$ git push origin --tags   将会把所有不在远程仓库服务器上的标签全部传送
  1. 检出标签
    在 Git 中你并不能真的检出一个标签,因为它们并不能像分支一样来回移动。 如果你想要工作目录与仓库中特定的标签版本完全一样,可以使用 git checkout -b [branchname] [tagname] 在特定的标签上创建一个新分支:
$ git checkout -b testTag v1.0

八、本地Git 分支

1.新建分支

$ git branch testing  新建testing分支  未切换
$ git branch -b testing  新建并切换分支

2.切换分支

$ git checkout master  切换到master分支

3.查看分支

$ git branch
  dev
  master
  testTag
 1. testing1    //分支前的 * 字符:它代表现在检出的那一个分支(也就是说,当前 HEAD 指针所指向的分支)。 这意味着如果在这时候提交,testing1 分支将会随着新的工作向前移动。
  1. 查看每个分支最后的提交情况
$ git branch -v

5.删除分支

$ git branch -d testing  删除testing分支

5.合并分支

$ git checkout master  先切换分支到master
$ git merge testing1   将testing1分支上的内容合并到master分支上

遇到冲突时的分支合并
有时候合并操作不会如此顺利。 如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们。此时 Git 做了合并,但是没有自动地创建一个新的合并提交。 Git 会暂停下来,等待你去解决合并产生的冲突。 你可以在合并冲突后的任意时刻使用 git status 命令来查看那些因包含合并冲突而处于未合并(unmerged)状态的文件。
任何因包含合并冲突而有待解决的文件,都会以未合并状态标识出来。 Git 会在有冲突的文件中加入标准的冲突解决标记,这样你可以打开这些包含冲突的文件然后手动解决冲突。 出现冲突的文件会包含一些特殊区段,看起来像下面这个样子:

<<<<<<< HEAD:index.html
<div id="footer">contact : [email protected]</div>
=======
<div id="footer">
 please contact us at [email protected]
</div>
>>>>>>> testing1:index.html

这表示 HEAD 所指示的版本(也就是你的 master 分支所在的位置,因为你在运行 merge 命令的时候已经检出到了这个分支)在这个区段的上半部分(======= 的上半部分),而 testing1 分支所指示的版本在 ======= 的下半部分。 为了解决冲突,你必须选择使用由 ======= 分割的两部分中的一个,或者你也可以自行合并这些内容。 手动解决冲突后, 将需改的内容提交,完成merge操作。

九、远程分支

1.显式地获得远程引用的完整列表

$ git ls-remote

2.推送

$ git push
$ git push origin dev  //只推送dev分支上的提交

3.下拉

$ git pull

十:git远程仓库地址变更

1、切换远程仓库地址:
方式一:修改远程仓库地址

【git remote set-url origin URL】 更换远程仓库地址,URL为新地址。

方式二:先删除远程仓库地址,然后再添加

【git remote rm origin】 删除现有远程仓库
【git remote add origin url】添加新远程仓库

2、【git remote -v 】查看远程仓库的地址

参考:https://git-scm.com/book

猜你喜欢

转载自blog.csdn.net/zhangsuhua0702/article/details/82055333
今日推荐