GIT使用总结(二)

补充

  • git add 参数
$ git add <file> 
$ git add .  //添加工作区已追踪文件的修改和新文件,不包括删除文件
$ git add -u //仅提交被追踪的文件,不包括新文件
$ git add -A //上面两个的合集
复制代码
  • git rebase 和 git merge 区别

   基于远程分支"origin",创建一个叫"mywork"的分支:

$ git checkout -b mywork origin  //默认从当前分支切
复制代码

   在mywork提交两个版本,同时远程的origin也被提交两个版本,此时两个分支出现了分叉:

   在这里,你可以用"pull"命令把"origin"分支上的修改拉下来并且和你的修改合并; 结果看起来就像一个新的"合并的提交"(merge commit):

   但是,如果你想让"mywork"分支历史看起来像没有经过任何合并一样,你也许可以用 git rebase:

$ git checkout mywork
$ git rebase origin
复制代码

   这些命令会把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新 为最新的"origin"分支(C4状态),最后把保存的这些补丁应用到"mywork"分支上。

   当'mywork'分支更新之后,它会指向这些新创建的提交(commit),而那些老的提交会被丢弃。 如果运行垃圾收集命令(pruning garbage collection), 这些被丢弃的提交就会删除. (请查看 git gc)

  • git rebase 解决冲突

   在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;
在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:

$ git rebase --continue
复制代码

   这样git会继续应用(apply)余下的补丁。
   在任何时候,你可以用--abort参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。

$ git rebase --abort
复制代码
  • 拉取远程分支并创建本地分支
$ git checkout -b 本地分支名 [origin/远程分支名]  //[]:默认是HEAD指向当前分支最新的版本
复制代码

    从远程分支切出新分支,并切到新建分支上(HEAD指向新分支,新分支指向远程最新的版本)
    这种方法,本地分支和远程分支形成映射关系

$ git fetch origin 远程分支名:本地分支名
复制代码

    本地新建分支,merge远程分支,不会切到新建分支上
    本地分支和远程分支不形成映射关系

  • cherry-pick

    把 branch1 上面的提交commit复制到 branch2

$ git log --pretty=online  // 查看缩略信息
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append bbb   //修改3
e475afc93c209a690c39c13a46716e8fa000c366 add aaa    //修改2
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file    //修改1
复制代码

    把 修改2 和 修改3 复制到branch2

$ git checkout branch2
$ git cherry-pick eaadf4e3..1094adb  // 把 修改1 到 修改3 复制到branch2 (不包括修改1)
复制代码

    cherry-pick 两种方法

$ git cherry-pick commitid  //单个
$ git cherry-pick commitid1..commitid100    //多个,不包含commitid1
复制代码
  • 代码回滚(远程和本地)

    操作分析:

    一开始是这样:

    A - B - C - D 远程
    A - B - C - D 本地

    第一步,git reset --hard B

    A - B - C - D 远程
    A - B             本地

    第二步,修改本地代码,记为 E

    A - B - C - D  远程
    A - B - E         本地

    如果我们现在pull 远程代码,情况如下:

    A - B - C - D 远程
    A - B - E - D' 本地

    其中,D' 包含了 C 和 D 的改动,merge 的是 "Fetched HEAD",也就是远程的 D
    如果你希望远程是 A - B - E,那就不要 pull,git push --force强制推送

  • git fetch,git merge,git pull

    关系:

    git fetch + git merge = git pull
    复制代码

    git pull 过程:

    // 本地分支,与线上分支的差别
    git fetch  //下载远程服务器最新更改到本地
    git diff origin/xxx  //查看差别
    
    // 可进一步查看哪些文件改动
    git diff HEAD FETCH_HEAD
    或者
    git diff HEAD FETCH_HEAD --stat
    
    //具体到文件改动内容
    git diff HEAD FETCH_HEAD xxxx/xxxx.js
    
    git merge origin XXXX
    复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值