文档章节

git 常用总结

hgfgoodcreate
 hgfgoodcreate
发布于 2016/07/16 10:46
字数 2706
阅读 10
收藏 0
点赞 0
评论 0
git

git

[TOC]

设置

git config --global user.name ""
git config --global user.email ""

基本操作

  1. 初始化git库:git init
  2. 添加文件到分支:
    1. git add filename
    2. git commit -m "statement about the change"
  3. 查看仓库状态:git status,检查仓库各分支状态
  4. 修改已提交到分支的文件后,使用git add保存修改,使用git checkout放弃修改。
  5. 使用git add暂存更改后,可以使用git reset取消暂存。

如果有多个文件,并且不同文件间有的是为了同一个功能,有的不是,最好的是将他们分别暂存提交,能更容易的调优每一次提交。

  1. 修改git commit中使用的编辑器:git config --global core.editor vim
  2. 在暂存了某次修改,但是并未提交,后又修改了文件,那么提交只能提交已经暂存的修改。

使用 git . 来添加当前文件夹中所有子文件夹和文件。

  1. 使用git log查看提交过的记录

git log:一条提交记录分多行展示:第一行是提交的唯一hash值;第二行是作者,第三行是提交时间,然后是提交的说明

  • 使用git log --pretty=oneline 使得每条记录作为一行输出
  • 使用参数--max-count=2表示从记录中选择最新的两条记录输出
  • 参数--since="5 minutes ago" 5分钟前到现在的提交记录
  • 参数--until="5 minutes ago" 输出从仓库建立到5分钟前提交的记录
  • 参数--author="username" 输出username用户提交的记录
  • 参数--merge 输出只有merge的提交记录
  • 使用man git-log 查看log相关的参数
  • 使用--graph 使用ascll图形布局显示提交树
  • 使用--date=short 保留日期格式更好且更短

git log的pretty 的format参数值可以使用

  1. %h:commit的hash时间
  2. %cd:create datetime创建时间
  3. %s:statement注释
  4. %an: author name

为常见命令设置别名

在当前用户home目录$HOME(linux使用命令 cd ~进入)中,有git的配置文件.gitconfig 输入配置如下:

[alias]
	co = checkout
	ci = commit
	st = status
	br = branch
	hist = log --pretty=formate:'%h %ad | %s%d [%an]' --graph --date=short
	type=cat-file -t
	dump = cat-file -p

设置shell别名:

alias gs='git status '
alias ga='git add '
alias gb='git branch '
alias gc='git commit'
alias gd='git diff'
alias gco='git checkout '
alias gk='gitk --all&'
alias gx='gitx --all'

alias got='git '
alias get='git '

如果需要使用go语言,需要将上述alias中go 改为gco比较好。 gs可能与linux ghostscript冲突。需要注意!

标记版本

使用git tag v1(其中v1表示版本号)给当前版本打上标签

使用git checkout转到其他版本,然后使用git tab versionnumber给转到的版本打上标签。

使用git checkout v1^表示v1上一个版本。或者使用git checkout v1~1

撤销更改

使用git checkout master 跳转到master上面(不然之后操作的时候就把当前master的记录给覆盖掉了)

  1. 没有暂存 若本地更改没有使用git add 暂存到仓库,那么可以使用git checkout filename 将文件转到之前的master版本保存的记录。
  2. 已经暂存 使用git reset HEAD filename 去取消暂存,但是reset命令不会更改文件内容, 文件中已经修改的内容还在文件中。如果想将文件中的内容恢复到原来状态,可以使用git checkout filename
  3. 已经提交 使用git revert HEAD(会自动打开commit编辑界面)或者git revert --no-edit(不会打开编辑器),将提交版本回到上一个版本。也可以就爱那个HEAD部分使用更早版本的hash值代替,直接回到更早的版本。
  4. 从分支中移除提交 revert命令是撤销仓库中任意提交的命令。 reset 命令是重置命令,当给定 一个提交的 引用(标签,hash值, 分支)时, reset命令将:
  5. 重写当前分支到指定的特定提交
  6. 重置暂存区到匹配的特定提交(可选)
  7. 重置工作目录到匹配特定的提交(可选)

可以使用git reset --hard v1将分支中中v1版本以后的提交全部移除。 其中--hard参数表示应当更新工作目录(文件和文件夹)以便与新的分支头保持一致。

使用git hist --all可以看到之前的所有提交记录,什么文件都没有丢。被移除的内容会一直保存在仓库中,知道运行垃圾回收软件。

重置一般是安全的,但是如果分支是共享在远程服务器上的,那么reset可能会导致用户共享的分支混乱

在上例中,可以通过git tag -d tagname 移除标签,让仓库回收删除的分支(回收垃圾)。 回收后使用git hist --all,在分支的历史记录中就看不到移除的分支信息了,好像那个分支从未提交一样。

修改提交

在提交了一个版本后,发现提交的版本忘了一项纪录,但是又不想提交两次,则可以在修改/添加好要修改的记录后,使用git add filename将添加/修改的file暂存,然后使用git commit --amend -m "comment"命令,替换掉上次的提交记录。

移动文件

在项目需要调整文件结构的时候,需要移动文件。 使用git mv 命令移动文件。

.git 目录

使用ls .git查看.git目录下文件

$ ls .git
COMMIT_EDITMSG  ORIG_HEAD   hooks       logs        rr-cache
HEAD        config      index       objects
MERGE_RR    description info        ref

对象存储

对象存储在objects文件夹中,文件爱你都经过压缩处理。

$ ls -C .git/objects
09  1f  27  43  69  83  97  af  e4  info
0f  22  28  58  6b  94  9c  b5  e7  pack
11  24  32  59  78  96  a1  c4  eb
$ ls -C .git/objects/09
6b74c56bfc6b40e754fc0725b8c70b2038b91e  9fb6f9d3a104feb32fcac22354c4d0e8a182c1

在objects目录的子目录中,每个文件都是用38字符命名的文件。

配置

配置在.git/config文件中,该文件是项目级配置文件。在这儿的配置条目将覆盖你的主目录中.gitconfig 文件中的配置条目。

$ cat .git/config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true

分之与标签

$ ls .git/refs
heads
tags
$ ls .git/refs/heads
master
$ ls .git/refs/tags
v1
v1-beta
$ cat .git/refs/tags/v1
1f7ec5eaa8f37c2770dae3b984c55a1531fcc9e7

.git/refs/heads文件夹保存所有的分支,文件名为分支名。文件中的内容为该分支最后一次提交的hash值。 .git/refs/tags 文件夹保存标签。每个标签文件中是标签对应的提交版本hash值。

HEAD文件

$ cat .git/HEAD
ref: refs/heads/master

HEAD文件保存当前分支的引用。

分支

创建分支

使用git checkout -b branchname创建并切换到分支。 它是git branch branchnamegit checkout branckname的简写。

导航分支

使用git checkout branchname 切换分支,在不同分支下,相同文件的内容可能会不一样。

合并分支

当出现多个分支,master开始修改文件,那么在git log --graph --all就可看到版本分叉。 此时可能需要将多个分支合并 使用git merge branchname将当前分支与branchname分支合并到当前分支。

将master分支修改后,bak分支不变,merge master分支到bak 可保持bak与master的兼容性。

冲突和解决冲突

  1. 合并 当master分支和greeter分支一致,修改master分支中与greeter分支中共有的文件时,会出现冲突。

冲突原因:greeter有一个文件的版本,master有一个版本,合并的时候怎么选择?

使用编辑器打开冲突文件,手动解决冲突。

解决冲突后,将greeter merge到master,执行的是快速合并,因为master头是分支greeter头的祖先,可以进行快速合并,当快速合并时,分支指针简单的前进到与greeter分支相同的提交处。

  1. 变基 可以使用git rebase master将master分支的所有的更改和greeter分支更改合并到greeter分支。并且提交树会被重写,以至于master分支称为greeter分支的一部分。

一般在公有仓库使用合并,在短期本地项目中使用变基。 变基会丢失历史提交信息!!! 变基会造成老版本丢失(垃圾回收时)

clone

使用git clone from to 可将from仓库克隆到to仓库。这两个仓库几乎一样,除了to仓库多了一个origin分支。

使用git remote 查看远程仓库的列表 使用git remote show origin即可查看origin的信息。

查看远程分支

使用git branch 发现只有master分支列出来了。【git branch 默认只会列出本地分支】

使用git branch --all列出全部分支,此时可以看到从远程仓库中克隆的分支。

取得远程更改

使用git fetch 从远程仓库拉下更改,拉下的更改是合并到了origin/master分支【即origin仓库的master分支】,但是它并没有将拉下的更改整合到克隆仓库的分支中。

git fetch 从远程仓库中取得新的提交,但是它不会将这些提交合并到本地仓库中。

合并远程更改

使用git merge origin/master合并origin/master分支到本地分支。

上述的拉下并合并可以由操作git pull完成,git pull等价于git fetchgit merge

添加跟踪分支

添加远程分支到本地分支。git brach --track greeter origin/greeter 操作后,在克隆仓库中就可以看到远程仓库的greeter分支了。

推送更改到远程分支

使用git push origin master,将本地仓库推送到远程仓库的master分支。

此时如果在远程仓库包含工作目录,而且使用git checkout master 正在master分支中。会报错“git 不允许push 操作更新到non-bare 仓库,因为这样会导致remote仓库的索引(index)和工作树(work tree) 与你push的不一致”。 ** 解决的办法**:最好是将更改push到裸仓库;也可将远程仓库checkout到别的分之下。这样就可以push到远程仓库的master分支了。

裸仓库

裸仓库指的是没有工作目录(工作目录指需要做版本管理的文件目录)的仓库,即只有原仓库中的.git目录下的文件。

裸仓库一般用于共享。方便合作开发。 比如多人开发: A:裸仓库 B:仓库1 C:仓库2 B修改后,push到A,C获取更改只需要从A中获取更改,并与自己的分支合并。

使用git clone --bare hello hello.git创建裸仓库hello.git

托管仓库

使用git daemon --verbose --export-all --base-path=.使用git共享自己的仓库。

如果想使用远程push,托管的仓库必须设置参数--enable=receive-pack

© 著作权归作者所有

共有 人打赏支持
hgfgoodcreate
粉丝 8
博文 51
码字总数 117746
作品 0
海淀
程序员
Git 学习看这篇就够了!

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。 可能新手会问“git和github有什么关系啊?” git是一个版本控制工具; github是一个用git做版本控...

Michaelyn ⋅ 2016/12/26 ⋅ 0

git文章列表

关于gitlab默认clone协议 Git实现从本地添加项目到远程仓库 翻翻git之---一个简单的标签控件 LabelView (随手发了两张小宝宝的玩耍照) Git 项目推荐 | Java 版微信普通号机器人 翻翻git之---...

d_watson ⋅ 2016/04/20 ⋅ 0

快速搭建git及设置github

快速搭建git及设置github 做过开发的同学对git肯定都是非常的熟悉了, 本文主要是对这些知识做一些总结,能够帮助你快速搭建好自己的环境 Git是目前世界上最先进的分布式版本控制系统,相对于传...

陈小扁 ⋅ 2016/04/22 ⋅ 0

git常用总结

初始化:git init 初始化后在.git目录下又config文件,要加入个人信息才能用,否则不能做任何修改。 至少加入: [user] name=xxx email=xxxx@dxxx.com 要忽略某些文件添加 .gitignore文件 gi...

首席执行官机器人 ⋅ 2016/12/17 ⋅ 0

git回滚及常用命令

工作中我们经常需要对代码进行回滚,本地回滚都很简单,但是远程回滚并不是那么容易。网上的大部分资料写的都很复杂,操作不够简单明了。现总结以下我经常用到的git命令。 关于本地回滚 本地...

tiancai啊呆 ⋅ 01/17 ⋅ 0

我是如何学习git

一开始学习git的时候,网上的git教程很多,看得人眼花缭乱,不知道如何下手。现在对git已经很熟悉了,回过头来总结一下学习方法。 一般官方文档是最全面,但是不一定适合快速上手。我们可以学...

好好编程 ⋅ 2017/11/14 ⋅ 0

Git常用命令简明小结

引言: Git由于其良好的分布式特性,被广为采用,本文将综述其核心的关键指令。 创建Branch 查看远程分支 Options: 查看本地分支branch 切换branch 提交指令 新增文件到Git管理之下 提交到本...

bladestone ⋅ 2017/12/11 ⋅ 0

git常用使用场景总结

git提取出两个版本之间的差异文件并打包 两次提交之间的差异: 两个版本之间的差异: 修复 Bug 流程示例 说明: devv2.0.1 是最新版,devv2.0.2 为当前正在开发的分支 解决bug示例: 如当前开...

风清扬-深圳 ⋅ 2016/08/08 ⋅ 0

Git安装及配置5分钟快速教程

Git是什么 Git是一款免费、开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。 与常用的版本控制工具CVS、Subversion等不同的是它采用了分布式版本库的方式,不...

架构之路 ⋅ 2017/11/27 ⋅ 0

git 命令常用总结

极速版: 查看分支: git branch 或者 git branch -v A) 创建分支 git branch mystudygit1.0 B)拉取分支 1、查看远程分支:git branch -a 2、拉取并切换分支:git checkout -b v1.3.11 3、查...

MarkCo ⋅ 2016/01/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

线程池

一、线程池:提供了一个线程队列,队列中保存着所有等待状态的线程。避免了创建与销毁额外开销,提高了响应的速度。 二、线程池的体系结构: java.util.concurrent.Executor : 负责线程的使用...

stars永恒 ⋅ 20分钟前 ⋅ 0

你值5K还是15K?实战案例,测测你的分析功力

本文源自陈老师遇到的真实案例。 老板说:“我们今年准备参加展会,做一年。以前我没参加过,没关系,这里有一份展会数据,你回去分析下哪些有价值,后边组织的时候有个指导”。现在你收到任...

加米谷大数据 ⋅ 21分钟前 ⋅ 0

中文转英文功能

package com.sysware.task.util;import net.sourceforge.pinyin4j.PinyinHelper;import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;import net.sourceforge.pinyin4j.for......

AK灬 ⋅ 22分钟前 ⋅ 0

JNI Java层类关联C/C++层的类

Android开发时,因为要实现某某功能,需要集成算法公司的算法库(so库),这就需要自己编写JNI。 通常这些库提供的接口可以概况成1、初始化 2、算法处理 3、释放 4、打印版本号 初始化后会返...

国仔饼 ⋅ 25分钟前 ⋅ 0

maven下载jar包改为阿里云的maven库

一:修改maven安装路径中conf文件夹下的setting.xml文件 <mirrors> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/......

夜醒者 ⋅ 26分钟前 ⋅ 0

电商用户行为分析大数据平台相关系列10-基础数据结构分析

电商用户行为分析大数据平台相关系列1-环境介绍 电商用户行为分析大数据平台相关系列2-HADOOP环境搭建 电商用户行为分析大数据平台相关系列3-HIVE安装 电商用户行为分析大数据平台相关系列4...

xiaomin0322 ⋅ 27分钟前 ⋅ 0

使用readLine()方法遇到的坑

下午玩 TCP/IP 的 Socket 通信时,使用 BufferedReader 的 readLine() 遇到了一个坑,现在终于解决了,特此记录下来。 程序很简单,客户段从控制台读取用户输入,然后发送至服务器端,主要代...

孟飞阳 ⋅ 27分钟前 ⋅ 0

基于Hadoop集群的Hive安装配置(Derby数据库)

Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据,提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行(具体的Hive架构大家自行搜索)。接下来主要讲下Hadoop集群下...

海岸线的曙光 ⋅ 28分钟前 ⋅ 0

CoreOS裸机iso安装和相关配置

裸机通过iso安装CoreOS,个人趟了很多坑,以下就是完整的从零开始部署和配置的过程,希望对大家有用。 一、安装CoreOS到硬盘 1. 准备Live iso镜像,制作好usb启动盘 Live iso下载地址 2. 搭建...

ykbj ⋅ 33分钟前 ⋅ 0

jquery控制表格锁列(转)

表格已经完成后新加的需求,要实现锁表格的第一列。很多带这种效果的都是js封装的框架或者具体某种框架的组件,不适用解决当前问题。作为后端开发又实在不熟样式,搜到了一个可以用的,虽然样...

刘昌鑫 ⋅ 35分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部