Git基本知识

git 基本:(Git 保存的不是文件的变化或者差异,而是一系列不同时刻的文件快照.)



环境配置:

 yum install git -y
 # 环境配置文件目录
 # 1、/etc/gitconfig        //    --system
 # 2、~/.gitconfig或~/.gitconfig      //     --global
 # 3、git仓库目录下.git/config
 git config --global user.name neo
 git config --global user.email neo@test.com
 git config --global core.ui true
 git config --global core.editor vim
 git config --global alias.co checkout
 git config --global alias.br branch
 git config --global alias.ci commit
 git config --global alias.st status
 git config --global alias.unstage 'reset HEAD --'
 git config --global alias.last 'log -1 HEAD'
 git config --global pull.rebase true
 git config --list
 配置存放在.git/config配置文件中,也可以直接修改此文件

git仓库有两类:
裸仓库:不存在工作区,主要用于服务器进行数据交换
本地仓库:代码文件工作的区域

[root@elk-node2 project]# git init --bare test1    //裸仓库
Initialized empty Git repository in /data/project/test1/
[root@elk-node2 project]# ls -al test1
drwxr-xr-x 2 root root    6 Mar  7 03:11 branches
-rw-r--r-- 1 root root   66 Mar  7 03:11 config
-rw-r--r-- 1 root root   73 Mar  7 03:11 description
-rw-r--r-- 1 root root   23 Mar  7 03:11 HEAD
drwxr-xr-x 2 root root 4096 Mar  7 03:11 hooks
drwxr-xr-x 2 root root   20 Mar  7 03:11 info
drwxr-xr-x 4 root root   28 Mar  7 03:11 objects
drwxr-xr-x 4 root root   29 Mar  7 03:11 refs
[root@elk-node2 project]# git init test2     //本地仓库(俗话)
Initialized empty Git repository in /data/project/test2/.git/
[root@elk-node2 project]# ls -al test2
drwxr-xr-x 7 root root 111 Mar  7 03:12 .git

文件状态:已跟踪和未跟踪(在仓库有没有此文件的记录,有表示已跟踪)

git命令:

Getting and Creating Projects

init    //初始化仓库
# git init   //将当前目录初始化成为项目仓库目录,会生成.git的目录,存放数据库和配置等信息
clone   //克隆远程仓库,
# git clone [urls] [NEWNAME]    //先初始.git文件目录,在从远程服务器取下所有数据放入到.git,然后读取最新版本的文件的拷贝,[newname]  本地取和新名字
# urls支持多种协议:git ,ssh ,https ,path ,ftp ,rsync等
# 会自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支

Basic Snapshotting

add   //添加跟踪已修改或者未跟踪文件到暂存区。
status   //检查工作区文件状态
# git status --short(git status -s)    //状态简览
[root@elk-node2 test2]# git status -s      //M有两个位置
M  file1        //文件修改了,并且添加到了暂存区
 M file2        //文件修改了,还未添加到暂存区
A  file3        //新添加到暂存区
?? file4       //??表示新添加,未被跟踪
MM file5    //文件修改了,放到暂存区之后,接着又修改了
# =====忽略文件=====
# 总有些文件不想被git一直跟踪,因为不需要提交到git仓库.gitignore 配置文件定义
# https://github.com/github/gitignore
# .gitignore格式规范
# • 所有空行或者以 # 开头的行都会被 Git 忽略。
# • 可以使用标准的 glob 模式匹配。
# • 匹配模式可以以(/)开头防止递归。
# • 匹配模式可以以(/)结尾指定目录。
# • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
# cat .gitignore
# *.[oa]    //忽略所有以.a或.o文件
# !lib.a     //除了lib.a文件,其他文件都忽略跟踪
# /TUDO    //忽略当前目录下的TUDO文件,/表示防止递归其他目录下的TUDO文件也被忽略
# build/     //忽略build目录下所有文件,/表示指目录
# doc/*.txt   //忽略doc目录下所有以.txt结尾的文件,无递归
# doc/**/*.pdf    //忽略doc目录所有以.pdf结尾的文件,包含递归
# =====
diff   //比较文件前后的区别(针对暂存区来说,比如说一个文件修改,并添加到暂存区这个时候需要用diff staged关键字,此时在去修改文件,用diff staged查看不到内容,可以用diff)
# git diff     // 比较工作区与仓库提交区的文件区别
# git diff  (--staged | --cached)     //比较当前文件与暂存区快照的区别
# git difftool   //图形界面。
commit     //将暂存区快照信息提交的到仓库
# git commit  // 调用你设置的editor编写注释,然后并提交
# git commit -m "STRING"   //直接添加注释并提价
# git commit -a    // 把已跟踪的文件暂存起来一并提交,(未被跟踪的不会)
# git commit --amend    //将此次提交与上次提交合并,只显示一次提交(log中只看到一次提交,在reflog中显示全部提交并且有amend字样显示)
reset   //撤销添加到暂存区的文件
# git reset HARD <file>
rm       //删除文件
# git rm  // 删除本地文件与暂存区的快照记录,接着提交,就把仓库的跟踪记录一并删除
# git rm -f   //当文件修改提交到暂存区,需要-f强制删除
# git rm --cached    //删除仓库当作的文件与跟踪记录,本地保留
# git rm log/\*.log    //glob模式
mv     //更改文件名字
# git mv oldnam   newname
# //相当于工作区重命名文件,接着删除文件,接着添加到新名字的文件到暂存区
stash     //保存进度

Branching and Merging
变基与合并使用:总的原则是,只对尚未推送或分享给别人的本地修改执行变基操作清理历史,从不对已推送至别处的提交执行变
基操作,这样,你才能享受到两种方式带来的便利。

branch   // 创建分支
# git branch dev   //创建名为dev的分支
# git branch -d test  //删除名为test的分支    ,没有合并的分支不能删除,但可以是用-D强制删除
# git branch --merged    //显示已经合并的分支
# git branch --no-merged    //显示未合并的分支
checkout    
# git checkout -- <file> 
# git checkout <branch>   //切换分支
merge   //合并分支
# git merge dev    //合并dev分支到当前分支
log
tag  //特定版本打标签
# git tag    //版本名称顺序不重要
# git tag -a 标签 -m  "注释"
# git show 标签    查看标签信息
# git tag -a 标签  ID    //对过去ID这个提交版本大标签
# git push [remote-name] [tagname]    //推送标签到远程服务器
# git push [remote-name] tags   //推送服务器没有的所有标签
rebase   变基,命令将提交到某一分支上的所有修改都移至另一分支上,就好像“重新播放”一样。
# git checkout dev      //切换到dev分支
# git rebase master              //将目前所处在的分支(dev)修改的内容变基到master分支
# First, rewinding head to replay your work on top of it...
# Applying: add ts5
# Sharing and Updating Projects
# 例子:
# git rebase --onto master server client
# “取出 client 分支,找出处于 client 分支和 server 分支的共同祖先之后的修改,然后把它们在 master 分支上重演一遍”
remote   //查看远程仓库
# git remote -v    //列出远程仓库简息
# git remote add <shortname> <url>    //添加远程仓库
# git remote show [remote-name]
# git remote rename oldname newname   //重命名远程仓库
fetch   //从远程仓库拉取数据
# git fetch [remote-name]    //从远程仓库拉取本地没有的数据,并不会自动合并
pull   //远程仓库拉取数据
# git pull   //通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支
push   //上传数据到远程仓库
# git push [remote-name] [branchname]   //推送数据时,先拉取,否则线上版本高,会导致推送不成功

Inspection and Comparison

log    //查看提交日志
-p 按补丁格式显示每个更新之间的差异。
--stat 显示每次更新的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--graph 显示 ASCII 图形表示的分支合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和
format(后跟指定格式)。
# git log -p   //查看每次提交的内容差异
# git log -p -2   //查看最近两次提交的内容差异
# git log -p -2 --stat   //粗略统计信息
# git log --pretty=oneline ,short , full ,fuller,  //简略一行显示
# git log --pretty=oneline --graph   //图形显示分支合并历史
# git log --pretty=format:"%h - %an , %ar :  %s"
# format格式输出:
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 --date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明
# git log 输出选项
-(n) 仅显示最近的 n 条提交
--since, --after 仅显示指定时间之后的提交。
--until, --before 仅显示指定时间之前的提交。
--author 仅显示指定作者相关的提交。
--committer 仅显示指定提交者相关的提交。
--grep 仅显示含指定关键字的提交
-S 仅显示添加或移除了某个关键字的提交
# 例子,如果要查看 Git 仓库中,2008 年 10 月期间,Junio Hamano 提交的但未合并的测试文

件,可以用下面的查询命令:
# git log --pretty="%h - %s" --author=gitster --since="2008-10-01" --before="2008-11-01" --no-merges -- t/
# git log --oneline --decorate //查看各个分支当前所指的对象
diff

git 开发部署,自动化部署
http://blog.csdn.net/richard_jason/article/details/53188200

setfacl -R -m u:test:rwx /xxx/
setfacl -R -d --set u:test:rwx /xxx/ #

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容