Git

资料整理

  1. 廖雪峰 JavaScript Python Git 教程
  2. git官方文档

笔记 摘自上面的资料#

Git 基础知识

Git 数据的可靠性是靠文件的校验和做到的。
Git 三种状态: 已提交( committed ) 、已修改(modified)、已暂存(staged)。
已提交表示数据已经安全的保存在本地数据库中


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

Git管理版本差异,并不是像其它系统那样保存一组基本文件和每个文件虽时间逐步基类的差异,而是采用快照的形式。Git在你提交更新或保存项目状态时,对当时全部文件制作一个快照并保存这个快照的索引。如果文件没有修改,Git不再重新存储该文件,而是只保留一个链接,来指向之前存储的文件。

Git 基础操作

概念: 仓储(repertory), 跟踪(track), 暂存(stage), 提交(commit), 推送(push), 拉取(pull)

获取Git仓库

  1. 在工程目录初始化 Git 仓库:
$ git init
  1. 追踪工程文件,并提交:
$ git add *.c
$ git add README
$ git commit -m 'initial project version'
  1. 上传到GitHub
$ git remote add origin https://github.com/chlq/javaStudy.git
$ ##git remote set-url origin https://github.com/chlq/javaStudy.git
$ git push origin
  1. 克隆现有的仓库
    当你执行 git clone 命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来.
    克隆仓库的命令格式为
$ git clone [url]
$ git clone https://github.com/chlq/XChart
$ $ git clone https://github.com/chlq/XChart myXChart

这会在当前目录下创建一个名为 “XChart” 的目录,并在这个目录下初始化一个 .git 文件夹
而第二个名字会创建 名字为 'myXChart' 的目录

更新到仓库

  1. 检查当前文件状态
$ git status
位于分支 develop
您的分支与上游分支 'origin/develop' 一致。
无文件要提交,干净的工作区
$ echo 'study how to use git' > studyGit
$ git status
位于分支 develop
您的分支与上游分支 'origin/develop' 一致。
未跟踪的文件:
 (使用 "git add <文件>..." 以包含要提交的内容)
   studyGit
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

未跟踪(untracked) 意味着 仓库之前的快照中没有这个文件;Git也不会自动降至纳入跟踪范围,说白了就是在仓库中是黑户,未登记.虽然冷冻室里偶尔会有老鼠, 但是食物登记上可没有, 管理系统(Git)也不会主动添加上来

  1. 跟踪新文件
$ git add studyGit
$ git status
位于分支 develop
您的分支与上游分支 'origin/develop' 一致。
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

    新文件:       studyGit

这时该文件处于 暂存状态( staged); 另外 git add 以目录为参数,则会递归跟踪该目录下的所有文件.

  1. 暂存已修改文件
$ echo 'test' >> CONTRIBUTORS 
$ git status
位于分支 develop
您的分支与上游分支 'origin/develop' 一致。
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

    新文件:       studyGit
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

    修改:         CONTRIBUTORS
$ git add CONTRIBUTORS 
$ git status
位于分支 develop
您的分支与上游分支 'origin/develop' 一致。
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

    修改:         CONTRIBUTORS
    新文件:       studyGit

git add 应当利皆为“添加内容到下一次提交中”而不是“将一个文件添加到项目中”. 另外 提交时只提交暂存区里的变更,已更改但未暂存的不会提交.

  1. 其他
$ git status -s ## 简略信息
M  CONTRIBUTORS
A  studyGit
$ cat .gitignore ## 忽略的文件, 正则表达式
$ git diff
  1. 提交更新
$ git commit
$ git commit -m "This is a git commit test."
$ git commit -a -m "can commit all file that tracked"

Git - 分支

每次提交对象会包含一个指向上次提交对象(父对象)的指针,提交的信息,作者及邮箱等。
分支其实就是指向其中一个对象的指针。

$ git branch testing ##在当前所在的提交对象上创建一个testing分支指向该对象。
##一直指向当前所在提交对象的指针叫 HEAD
$ git log --oneline --decorate ## 查看个分支当前的对象
$ git checkout testing ## 这样当前分支HEAD就切换到testing分支了
$ git log --oneline --decorate
d62d657 (HEAD, origin/develop, origin/HEAD, develop) study git commit you can de
$ touch gittestfile
$ echo "git testing branch" >> gittestfile 
$ git add gittestfile 
$ git commit -a -m 'branch testing'
[testing e077c17] branch testing
 2 files changed, 2 insertions(+)
 create mode 100644 gittestfile
$ git log --oneline --decorate
e077c17 (HEAD, testing) branch testing
d62d657 (origin/develop, origin/HEAD, develop) study git commit you can deal it 
$ git checkout -b iss53
## 与下面两条等效
$ git branch iss53
$ git checkout iss53
# git branch -d testing ##删除分支testing

本地分支合并

分支合并

想要将分支iss53合并到master分支上

$git checkout master
$git merge iss53
$git branch -d iss53
合并后

远程分支

阮一峰的网络日志-Git远程操作详解
阮一峰老师的日志写的非常条理清晰易懂
远程分支(remote branch)是对远程仓库中的分支的索引。远程分支本地可以查看但是无法移动,只有在进行网络交互时才会更新。
当你git clone 远端Git服务器里的代码时,Git自动将此远程仓库命名为origin, 并建立一个指向该仓库master分支的指针: origin/master

# 设置远程仓库名
$ git clone -o 希望的仓库名 远程git URL
# 通过 git branch 可以查看当前本地分支
➜   git:(chlq_cases) ✗ git branch
* chlq_cases
  master
# 通过 git branch -r 查看远程分支
➜ git:(chlq_cases) ✗ git branch -r 
  origin/HEAD -> origin/master
  origin/chlq_cases
  origin/dev
  origin/master
# 从远程分支创建新的本地分支
git checkout -b newBrach origin/master
# 与本地分支合并类似
git merge origin/master # 可以在当前本地分支上,合并origin/master
# 删除远程分支
git branch -r
git branch -r -d origin/xxxx

git remote

$ git remote -v
origin  ssh://git@git.xxx.com/~chenlanqiang/waimai-money-app-uitest.git (fetch)
origin  ssh://git@git.xxx.com/~chenlanqiang/waimai-money-app-uitest.git (push)
$ git remote set-url origin  ssh://git@git.xxx.com/~chenlanqiang/waimai_m_app_uitest_money.git
$ git remote -v
origin  ssh://git@git.sankuai.com/~chenlanqiang/waimai_m_app_uitest_money.git (fetch)
origin  ssh://git@git.sankuai.com/~chenlanqiang/waimai_m_app_uitest_money.git (push)

git fetch

git fetch命令用于从另一个存储库下载对象和引用。
git refspec 详解

# 同步 远程仓库 中的数据 到 本地
$ git fetch <远程仓库名> 
# 同步 远程仓库 制定分支 的数据 到 本地
$ git fetch <远程仓库名> <分支名>
# 同步 远程仓库origin 的master分支 的数据 到 本地 origin/master 里
$git fetch origin master 
# git fetch <refspec> 
# Refspec 的格式是一个可选的 + 号,接着是 <src>:<dst> 的格式,这里 <src> 是远端上的引用格式, <dst> 是将要记录在本地的引用格式。可选的 + 号告诉 Git 在即使不能快速演进的情况下,也去强制更新它。
# +refs/heads/*:refs/remotes/origin/*
git fetch --tags --process ssh://git@git.remote.com/xxx.git +refs/<tag, like heads>/<tag>:refs/remotes/origin/<tag>

git pull

与fetch 不同的是, git pull 可以指定要更新的本地分支(可以理解为不同代码版本的指针)
git pull 相当于 git fetch + git merge

$ git pull <远程仓库> < 远程分支>:<本地分支>
$ git pull origin master:chlq_cases
# 取回远程origin仓库的master分支, 与本地chlq_cases分支合并
# 不加 本地分支, 则默认合并当前分支
$ git pull origin master # 等效于下面的两句
$ git fetch origin
$ git merge origin/master

git push

git push 命令用于将本地分支的更新,推送到远程仓库

$ git push <远程仓库> <本地分支>:<远程分支>
# 如果省略 远程分支名 默认推送到与本地分支有 追踪关系的远程分支
$ git push origin master
# 省略本地分支, 表示 删除指定的远程分支
$ git push origin :master
# 等同于
$ git push origin --delete master

git tag

git tag 可以将分支上某个时间点的代码打上标签,方便代码版本管理、代码回滚等

$##打标签
$git tag -a your-tag-name -m "msg"
$##同步到远端仓库
$git push origin your-tag-name
$##列出说有tag
$git tag -l

追踪

fork 及 上传到upstream

勤快学:git教程

撤销操作

git-撤销操作

对commited的文件

$ git reset HEAD <file>...

对added的文件

$ git checkout -- <file>...

git stash

##简单实用
git stash
...
git stash pop
##更复杂点
git stash save "work in progress for foo feature"
##查看未提交的GIT栈
git stash list
##选择第几个栈
git stash apply stash@{1}

查看log

git-log 文档

man git-log
# 查看提交记录
git log
# 查看文件变更
git log --stat

commit dff06bc5535f40c0cbe4df905f69eec4418a056b
Author: 
Date:   Wed Jun 28 22:15:01 2017 +0800

    modify serve host ip and add some cases

 .../TestNotifyPayInfo.java                          |  84 ++++++--------
 .../TestGetSettleBillOrderVoList4PC.java            |  53 +++++++++
 .../TestGetSettleMockAccountFlows.java              | 124 +++++++++++++++++++++
 .../TestQueryAllAccountInfo.java                    |  65 +++++++++++
 src/test/resources-beta/conf/server.properties      |   2 +-
 src/test/resources-test/conf/server.properties      |   2 +-
 6 files changed, 277 insertions(+), 53 deletions(-)

#查看指定commit, 可以看到文件变更,内容更改
git show $commitCode

#以作者或提交人查看
git log -p --author=chlq
git log -p --commitor=chlq
#以时间查看
git log -p --since="2017-06-27" --until="2017-06-28" --author=chlq

回退

git - 代码回滚

#回退命令:
$ git reset --hard HEAD^         #回退到上个版本
$ git reset --hard HEAD~3        #回退到前3次提交之前,以此类推,回退到n次提交之前
$ git reset --hard commit_id     #退到/进到 指定commit的sha码
#强推到远程:
$ git push origin HEAD --force


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

推荐阅读更多精彩内容

  • git常用命令 GIT常用命令备忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章阅读 8,449评论 1 26
  • 1.设置 初次使用需要设置姓名和邮箱git config --global user.name "git用户名"g...
    jrg陈咪咪sunny阅读 752评论 0 1
  • 有一些毛病希望你知道 有一些热忱也希望你知道 茱萸,是一种常绿带香的植物。 一味中药。 茱萸的花语竟是富贵吉祥、驱...
    衣锦夜行在人间阅读 844评论 0 0
  • 我知道,25岁,我终于做了一件放肆的事…… 同居,跟一个认识一个月的人同居,他说好不会给我任何名分,连私下里都不会...
    兜兜的简书阅读 271评论 0 0