Git学习笔记

来源:互联网 发布:冯大辉 范凯 知乎 编辑:程序博客网 时间:2024/06/06 12:55

前言


趁着偷闲的时间,写了一篇 Git 学习笔记以便学习和今后回顾

内容


Git 基础学习

   Git 是一个开源的分布式版本控制工具,它的开发者是大名鼎鼎的 Linux 操作系统的作者 Linus Torvalds 。优点有速度快、完全分布式、允许成千上万个并行开发的分支、有能力高效管理类似 Linux 内核一样的超大规模项目

   学习 Git 最重要的是理解其内部原理,分清楚工作区、暂存区、版本库,还有就是理解 Git 跟踪并管理的是修改,而非文件。下面列举一下 Git 的一些特点:

1. 直接记录快照,而非差异比较

   Git 和其它版本控制系统的主要差别在于 Git 对待数据的方法。 概念上来区分,其它大部分系统以文件变更列表的方式存储信息。Git 更像是把数据看作是对小型文件系统的一组快照。 每次提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。

2. 近乎所有操作都是本地执行

   在 Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。比如要浏览项目的历史,Git 不需外连到服务器去获取历史,它只需直接从本地数据库中读取。 如果你想查看当前版本与一个月前的版本之间引入的修改,Git 会查找到一个月前的文件做一次本地的差异计算,而不是由远程服务器处理或从远程服务器拉回旧版本文件再来本地处理。

3. Git保证完整性

   Git 中所有数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。 这个功能建构在 Git 底层,是构成 Git 哲学不可或缺的部分。 若你在传送过程中丢失信息或损坏文件,Git 就能发现。Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。

4. Git一般只添加数据

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

5. 三种状态:已提交、已修改、已暂存据

   已提交表示数据已经安全的保存在本地数据库中。 已修改表示修改了文件,但还没保存到数据库中。 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

   Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。

   工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。

   暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作“索引”,不过一般说法还是叫暂存区域。

   基本的 Git 工作流程如下:

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

   如果 Git 目录中保存着的特定版本文件,就属于已提交状态。    如果作了修改并已放入暂存区域,就属于已暂存状态。    如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

Git简单命令行学习

   以下是对git的简单操作介绍

配置相关

更新用户信息配置

1.$ git config –global user.name “Your Name”

2.$ git config –global user.email “Your Email”

查看用户配置信息

   $ git config –l

创建

复制一个已创建的仓库

   $ git clone ssh://user@domain.com/repo.git

创建一个新的本地仓库

   $ git init

本地操作

把当前所有修改添加到下次提交中:

   $ git add

把对某个文件的修改添加到下次提交中:

   $ git add -p “file”

提交本地的所有修改:

   $ git commit -a

提交之前已标记的变化:

   $ git commit

附加消息提交:

   $ git commit -m ‘message here’

提交,并将提交时间设置为之前的某个日期:

   git commit –date=”date --date='n day ago'” -am “Commit Message”

查看工作路径下已修改的状态

   $ git status

显示与上次提交版本文件的不同:

   $ git diff

回退操作

   请勿修改已发布的提交记录!

   $ git commit –amend

查找

从当前目录的所有文件中查找文本内容:

   $ git grep “Hello World”

在某一版本中搜索文本:

   $ git grep “Hello World” v1.0

日志

从最新提交开始,显示所有的提交记录(显示hash, 作者信息,提交的标题和时间):

   $ git log

显示所有提交(仅显示提交的hash和message):

   $ git log –oneline

显示某个用户的所有提交:

   $ git log –author=”username”

显示某个文件的所有修改:

   $ git log -p “file”

谁,在什么时间,修改了文件的什么内容:

   $ git blame “file”

分支

列出所有的分支:

   $ git branch

切换分支:

   $ git checkout “branch”

创建并切换到新分支:

   $ git checkout -b “branch”

基于当前分支创建新分支:

   $ git branch “new branch”

基于远程分支创建新的可追溯的分支:

   $ git branch –track “new-branch” “remote-branch”

删除本地分支:

   $ git branch -d “branch”

更新与发布

列出当前配置的远程端:

   $ git remote -v

显示远程端的信息:

   $ git remote show “remote”

添加新的远程端:

   $ git remote add “remote” “url”

下载远程端版本,但不合并到HEAD中:

   $ git fetch “remote”

下载远程端版本,并自动与HEAD版本合并:

   $ git remote pull “remote” “url”

将远程端版本合并到本地版本中:

   $ git pull origin master

将本地版本发布到远程端:

   $ git push remote “remote” “branch”

删除远程端分支:

   $ git push “remote” :”branch” (since Git v1.5.0)或git push “remote” –delete “branch” (since Git v1.7.0)

合并与重置

将分支合并到当前分支

   $ git merge “branch”

将当前HEAD版本重置到分支中:

   请勿重置已发布的提交!

   $ git rebase “branch”

重置撤销:

   $ git rebase –abort

其他

放弃工作目录下的所有修改:

   $ git reset –hard HEAD

移除缓存区的所有文件(i.e. 撤销上次git add):

   $ git reset HEAD

放弃删除某个文件

   $git checkout – “file”

重置一个提交

   $ git revert “commit”

将HEAD重置到指定的版本,并抛弃该版本之后的所有修改:

   $ git reset –hard “commit”

将HEAD重置到上一次提交的版本,并将之后的修改标记为未添加到缓存区的修改:

   $ git reset “commit”

将HEAD重置到上一次提交的版本,并保留未提交的本地修改:

   $ git reset –keep “commit”

参考与扩展阅读

  • GitPro2

  • git-简明指南

  • learnGitBranching


原创粉丝点击