美文网首页
git 笔记

git 笔记

作者: Nily | 来源:发表于2017-01-09 11:46 被阅读0次

你通常用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

相关文章

网友评论

      本文标题:git 笔记

      本文链接:https://www.haomeiwen.com/subject/ztizvttx.html