git 笔记

你通常用git diff来找你当前工作目录和上次提交与本地索引间的差异。
$ git diff
上面的命令会显示在当前的工作目录里的,没有 staged(添加到索引中),且在下次提交时 不会被提交的修改。

如果你要看在下次提交时要提交的内容(staged,添加到索引中),你可以运行:
$ git diff --cached
上面的命令会显示你当前的索引和上次提交间的差异;这些内容在不带"-a"参数运行 "git commit"命令时就会被提交。

$ git diff HEAD
上面这条命令会显示你工作目录与上次提交时之间的所有差别,这条命令所显示的 内容都会在执行"git commit -a"命令时被提交。

你可以用 git diff 来比较项目中任意两个版本的差异。

$ git diff master..test
上面这条命令只显示两个分支间的差异,如果你想找出‘master’,‘test’的共有 父分支和'test'分支之间的差异,你用3个‘.'来取代前面的两个'.' 。
$ git diff master...test


当有几个commit时,合并为一个commit然后提交到远程的方法:

  1. checkout 到commit所在分支,例如ticket-123123
    git checkout ticket-123123

  2. gitk 图形化界面查看目前有几个commit要合并, 假设为3

  3. git rebase HEAD~3 --onto origin/develop
    onto后面为要提交的远程分支
    此时会显示
    First, rewinding head to replay your work on top of it...
    Applying: refs# 172198 fix Japanese project announcement notification refs #172198
    Applying: refs# 172198 fix Japanese project announcement notification refs #172198
    Applying: refs #172198 fix Japanese project announcement notification

  4. gitk查看状态

  5. git rebase -i HEAD~3
    在其中,把要合并过去的(新的)分支前的选项改为s或squash, 最早的commit 前的选项保留位pick,即:
    pick xxxxx messages...
    s yyyyy messages...
    s zzzzzz messages...
    其中zzzzz是最新的commit,xxxxx是最早的commit
    改完之后显示更改信息:
    [detached HEAD aec7724] refs #172198 fix Japanese project announcement notification
    Date: Wed Jan 4 11:08:34 2017 +0800
    3 files changed, 3 insertions(+), 17 deletions(-)
    delete mode 100644 company-timeline-version-up/src/main/resources/cassandra/data/framework/TextDefDto/20161229142900_INSERT_com.worksap.company.hue.core.dto.TextDefDto.json
    delete mode 100644 company-timeline-version-up/src/main/resources/cassandra/data/framework/TextDefDto/201701041026172198_INSERT_com.worksap.company.hue.core.dto.TextDefDto.json
    create mode 100644 company-timeline-version-up/src/main/resources/cassandra/data/framework/TextDefDto/20170104172198_INSERT_com.worksap.company.hue.core.dto.TextDefDto.json
    Successfully rebased and updated refs/heads/ticket-172198.

  6. 最后push
    git push origin ticket-172198 -f
    会显示成功信息:
    Counting objects: 11, done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (7/7), done.
    Writing objects: 100% (11/11), 987 bytes | 0 bytes/s, done.
    Total 11 (delta 1), reused 9 (delta 0)
    To git@scm.hue.workslan:company/collabo-verup-files.git

  • 776dc7a...aec7724 ticket-172198 -> ticket-172198 (forced update)

参考ref
http://www.jianshu.com/p/964de879904a
http://www.jianshu.com/p/4f1bad9e0a2d


重新在远程建新分支
先切换到远程develop
git checkout origin/develop

然后建一个新分支newbranch2
git checkout -b newbranch2

如果是空的,直接push,相等于覆盖
git push origin newbranch2

把自己的修改代码保存,在ticket分之下,checkout一个新的备份分支就可以

git checkout -b ticket-xxx-backup

然后切回ticket分支,rebase到新分支上去,有几个commit 参数就是几
git rebase HEAD~1 -- onto newbranch2

最后push,如果已经push过,就加-f参数


git 切换到远程tag
git fetch origin tag <tagname>
git checkout <tagname>


git通过rebase,形成一条线
https://segmentfault.com/q/1010000000430041
对应到我司工程:
git fetch origin <branchName>
git rebase HEAD~n -- onto origin/branchName
git push ticket-xxxxxx


git 把本地分支branch1更新到最新
如果本地没有改动,也不用fetch merge了
先git fetch origin branch1
再切到一个别的分支上
把本地分支删除
git branch -D branch1
git checkout origin/branch1 -b branch1

或者直接fetch origin 再git rebase origin/branch1

**** 如何合并两个仓库****
假设现在有两个repo:repo1,repo2,每个repo中都已经有一堆提交记录了,现在想把repo2中的记录合并到repo1中,命令如下:

cd repo1 
git remote add other ../repo2
git fetch other
git checkout -b repo2 other/master
git checkout master
git merge repo2

解释:
进入repo1文件夹
添加repo2作为repo1的远程仓库,并命名为other
将repo2的内容获取到repo1注意,使用fetch而不是pull,关于fetch和pull的区别[请戳这里](https://stackoverflow.com/questions/292357/what-are-the-differences-between-git-pull-and-git-fetch)

在repo1中创建名为repo2的新分支,同时切换到该分支,并且使用上一步获取的内容中的master分支的内容
切换到repo1的master分支
将repo2分支的内容合并到master分支

[](http://sabrinaluo.com/tech/2015/12/24/how-to-merge-repos-with-git/#一句话总结)一句话总结
将一个仓库的内容checkout到另一个仓库的一个分支,将该分支与master分支合并

注:不一定是master,可以是任意你要合并过去的分支。

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

推荐阅读更多精彩内容