美文网首页
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