文档章节

Git学习笔记

alazyer
 alazyer
发布于 2016/03/02 16:37
字数 1795
阅读 29
收藏 1
点赞 1
评论 0

三种状态

Git主要有三种状态,你的文件可能处于其中之一:

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

工作目录、暂存区域以及 Git 仓库

由此引入 Git 项目的三个工作区域的概念:

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

基本的 Git 工作流程如下:

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

其实上述三个状态还可以统称为已追踪(traced),git中还有其他的状态:

  1. 未追踪(untraced): 如果一个文件从来没有使用git add添加过(并且不是git clone下来的)的话, 处于这个状态。
  2. 未修改(unmodified): git clone下来后,或者git commit后文件处于这个状态。

文件的状态变化周期


git config

要想使用git,首先需要进行一些配置,使用到的命令都以git config开头。

git使用多个文件来保存用户的喜好(自定义设置),包含: 1. /etc/gitconfig: 包含系统上每一个用户及他们仓库的通用配置如果使用带有--system选项的 git config 时,它会从此文件读写配置变量 2. ~/.gitconfige或者~/.config/git/config: 只针对当前用户。可以传递--global选项让 Git 读写此文件。 3. <repo_base>/.git/config: 针对所在仓库。可以传递--local选项让 Git读写此文件。

每一个级别覆盖上一级别的配置。比如,<repo_base>/.git/config的配置变量会覆盖 /etc/gitconfig中的配置变量。

查看所有配置,包含system, global和local。

git config --list或者简写为git config -l

可以通过传入参数--<file-option>查看指定地点的配置

git config --system -l

git config --global -l

git config --local -l

设置用户名

git config --global user.name alazyer

设置用户邮箱

git config --global user.email alazyer@gmail.com

设置默认编辑器

git config --global core.editor vim

为checkout设置别名(alias)co,则git co就等价于git checkout

git config --global alias.co checkout


git init

以本文件夹目录为基础创建一个仓库

git init

在当前目录下新建名称为alazyer的仓库

git init alazyer


git clone

克隆远程仓库

git clone git@github.com:alazyer/alazyer.github.com.git

git clone后,远程仓库默认叫做origin,可以使用-o选项自定义远程仓库名称

git clone -o blog git@github.com:alazyer/alazyer.github.com.git

克隆远程仓库, 并自定义本地仓库名称

git clone git@github.com:alazyer/alazyer.github.com.git alazyer-blog


git remote

添加远程仓库

git remote add origin git@github.com:alazyer/alazyer.git

显示仓库名称以及对应远程url

git remote -v

查看远程仓库更多信息

git remote show origin

远程仓库重命名

git remote rename ole_origin new_origin

修改远程仓库地址

git remote set-url origin https://github.com/alazyer/alazyer.git

删除远程仓库

git remote remove origin


git status

查看仓库当前状态

git status


git diff

查看工作目录与暂存区域区别

git diff

查看暂存区域与Git仓库之间区别

git diff --cached或者git diff --staged


git add

添加文件到staged状态

git add <file[s]_modified>

添加目录到staged状态

git add <directory_name>


git rm

移除某个文件,并且从工作目录中删除

git rm <file[s]_removed>

移除文件,但是工作目录不删除该文件

git rm --cached <file[s]_removed>


git commit

提交暂存区域文件到Git仓库

git commit -m '<commit_message>'

添加所有修改的有追踪关系(traced)文件,并提交,等同于git add后`git commit```

git commit -a

使用--fixup或者--squash选项,并结合git rebase保证日志的清爽

git log --oneline

git commit --fixup <previous_commit_id>

git log --oneline

git rebase -i --autosquash <commit_id_before_previous>

git log --oneline


git fetch

将远程仓库全部(所有分支)更新取到本地

git fetch origin

将远程master分支更新取到本地

git fetch origin master


git pull

取回远程主机gh-pages分支的更新,并和本地的master分支合并

git pull origin gh-pages:master

取回远程主机gh-pages分支的更新,并和本地当前分支合并

git pull origin gh-pages

取回与本地当前分支有追踪关系的远程分支,并和当前分支合并

git pull origin


git push

将本地master分支推送到远程仓库gh-pages分支

git push origin master:gh-pages

将指定的本地分支master分支推动到远程对应追踪关系的分支,如果没有追踪关系会在远程新建同名分支

git push origin master

将本地所在当前分支推送到远程对应有追踪关系的分支

git push origin

删除远程某个分支

git push origin :remote_branch


git revert

丢弃某次提交的所有内容。该次提交还可以在git log中查看到。

git revert <commit_id> git-revert


git reset

git revert和git reset都可以用来清楚提交,但是相对来说git revert要更安全一些,二者区别可见下图。

git-revert-vs-reset

取消暂存的文件

git reset HEAD <file[s]_staged>

重写提交历史。(回滚到指定commit_id处,该commit_id之后的所有提交不再能从git log中看到。但是所有提交修改的内容会在工作目录中出现,可以使用git commit -a进行提交,达到修改提交历史的目的)

git reset <commit_id>

git commit -a


git clean

将git仓库中所有没有被追踪(untraced)文件清楚掉。

git clean

要想上面这个方法有效的话,需要保证设置过clean.requireForce为false

git config --global clean.requireForce false 否则会提示使用-i -n -f

交互式的清楚未追踪(untraced)文件,使用这个命令会要求输入y确认删除

git clean -i

仅仅查看使用git clean -f会删除那些文件(并未真正删除)

git clean -n

上述命令只清楚文件,要想删除目录需要使用-d选项

git clean -d -n git clean -d -f

git log

查看git仓库的所有日志

git log

查看某个文件所有日志记录

git log <file_name>

查看来自指定作者的提交记录

git log --author=alazyer

查看日志信息中包含指定信息的日志记录

git log --grep=pattern

每行显示一次提交(显示信息包含:commit_id, commit_msg)

git log --oneline或者git log --pretty=oneline


git reflog

查看git仓库中所有的操作日志(即使已被git reset也可看到)

git reflog


git checkout

丢弃对文件的修改(此时文件处于modified状态);如果文件已经通过git add过(此时文件处于staged状态),则需要首先使用git reset将文件状态改为modified。

git reset HEAD <file[s]_staged>

git checkout -- <file[s]_modified>

以当前分支状态为基础创建新分支,并切换到该分支

git checkout -b <new_branch>

以origin/gh-pages为基础,新建pages分支,并切换

git checkout -b pages gh-pages

切换分支

git checkout <branch_to_switch>

切换到某次提交

git checkout <commit_id>

git tag

查看所有标签(tag)

git tag或者git tag -l

查看包含指定信息的标签

git tag -l <pattern>

打标签v1.0,使用-a选项会有更多的功能

git tag [-a] v1.0

给之前的提交打标签v0.4

git tag [-a] v0.4 <commit_id>

删除标签v0.4

git tag -d v0.4

git branch

查看所有分支

git branch -a

查看远程分支

git branch -r

新建分支gh-pages

git branch gh-pages

查看哪些分支已经合并[未合并]到当前分支

git branch --merged

git branch --no-merged

手动设置追踪关系

git branch --set-upstream master origin/next


git merge

将gh-pages分支合并到master分支 首先,git checkout master,然后,git merge gh-pages

删除gh-pages分支

git branch -d gh-pages

© 著作权归作者所有

共有 人打赏支持
alazyer
粉丝 4
博文 68
码字总数 35022
作品 0
程序员

暂无文章

Weblogic问题解决记录

问题:点击登录,页面刷新但是不进去管理界面。解决:删除cookies再登录。

wffger
19分钟前
0
0
RxJava2的错误处理方案

最近使用retrofit2 + rxKotlin2写接口访问,想尽量平铺代码,于是就想到当借口返回的状态码为「不成功」时(比如:code != 200),就连同网络错误一起,统一在onError方法中处理。想法总是好的...

猴亮屏
26分钟前
0
0
程序的调试信息

调试二进制程序时,经常要借助GDB工具,跟踪程序的执行流程,获取程序执行时变量的值,以发现问题所在。GDB能得到这些信息,是因为编译程序时,编译器保存了相应的信息。Linux下的可执行程序...

qlee
49分钟前
0
0
应用级缓存

缓存命中率 从缓存中读取数据的次数与总读取次数的比例,命中率越高越好 java缓存类型 堆缓存 guavaCache Ehcache3.x 没有序列化和反序列化 堆外缓存ehcache3.x 磁盘缓存 存储在磁盘上 分布式...

writeademo
今天
0
0
python爬虫日志(3)find(),find_all()函数

1.一般来说,为了找到BeautifulSoup对象内任何第一个标签入口,使用find()方法。 以上代码是一个生态金字塔的简单展示,为了找到第一生产者,第一消费者或第二消费者,可以使用Beautiful Sou...

茫羽行
今天
0
0
java:thread:顺序执行多条线程

实现方案: 1.调用线程的join方法:阻塞主线程 2.线程池 package com.java.thread.test;public class MyThread01 implements Runnable {@Overridepublic void run() {Syste...

人觉非常君
今天
0
0
ElasticSearch 重写IK分词器源码设置mysql热词更新词库

常用热词词库的配置方式 1.采用IK 内置词库 优点:部署方便,不用额外指定其他词库位置 缺点:分词单一化,不能指定想分词的词条 2.IK 外置静态词库 优点:部署相对方便,可以通过编辑指定文...

键走偏锋
今天
19
0
Git 2.18版本发布:支持Git协议v2,提升性能

Git 2.18版本发布:支持Git协议v2,提升性能Git 2.18版本发布:支持Git协议v2,提升性能 新版本协议的主要驱动力是使 Git 服务端能够对各种 ref(分支与 tag)进行过滤操作。 这就意味着,G...

linux-tao
今天
0
0
python浏览器自动化测试库【2018/7/22-更新】

64位py2.7版本 更新 document_GetResources 枚举页面资源 document_GetresourceText 获取指定url的内容 包括页面图片 下载地址下载地址 密码:upr47x...

开飞色
今天
42
0
关于DCL双重锁失效及解决方案

关于DCL双重锁失效及解决方案 Double Check Lock (DCL)实现单例 DCL 方式实现单例的优点是既能够在需要时才初始化单例,又能够保证线程安全,且单例对象初始化后调用getInstance方法不进行...

DannyCoder
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部