文档章节

git 常用总结

hgfgoodcreate
 hgfgoodcreate
发布于 2016/07/16 10:46
字数 2706
阅读 13
收藏 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
粉丝 13
博文 56
码字总数 129575
作品 0
海淀
程序员
私信 提问
Git 学习看这篇就够了!

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

Michaelyn
2016/12/26
19
0
git文章列表

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

d_watson
2016/04/20
26
0
快速搭建git及设置github

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

陈小扁
2016/04/22
76
0
git常用总结

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

首席执行官机器人
2016/12/17
10
0
Webpack 、git常用命令总结

一、Webpack 常用命令总结 npm install webpack -g // 全局安装webpack npm init -y //初始化默认的package.json文件 npm install webpack --save-dev //下载webpack插件到node_modules 并在......

菜鸟的进阶
2017/10/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

我的Linux系统九阴真经

在今天,互联网的迅猛发展,科技技术也日新月异,各种编程技术也如雨后春笋一样,冒出尖来了。各种创业公司也百花齐放百家争鸣,特别是针对服务行业,新型互联网服务行业,共享经济等概念的公...

linux-tao
今天
17
0
MySQL: Starting MySQL….. ERROR! The server quit without updating PID file

前段时间打包了一个数据库镜像,但是启动容器之后发现报错 ··· ··· MySQL: Starting MySQL….. ERROR! The server quit without updating PID file 查了网络上的解决方案比较全,遂转帖...

blackfoxya
今天
4
0
C4C销售订单行项目价格维护方法

需求很简单,能够创建销售订单,在行项目里添加产品,带出价格来,同时把总价显示在销售订单抬头区域。 如下图所示: 下面是具体配置。 Business Configuration里,点击Sales Order的配置: ...

JerryWang_SAP
今天
14
0
deepin中配置robot framework环境

本文永久更新地址:https://my.oschina.net/bysu/blog/2989005 【若要到岸,请摇船:开源中国 不最醉不龟归】 1.在终端中输入pip,回车,如果提示没有该命令,则先安转pip sudo apt-get inst...

不最醉不龟归
今天
16
0
OSChina 周日乱弹 —— 钱不还,我就当你人不在了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享Bigleaf的单曲《小鹿》 《小鹿》- Bigleaf 手机党少年们想听歌,请使劲儿戳(这里) 周日在家做什么? 做手工呀, @poorfis...

小小编辑
今天
318
6

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部