关于Git

参考

ProGit

常用命令

  1. 新建分支并切换
    git checkout -b featureB origin/master
    相当于执行
    git branch featureB
    git checkout featureB

  2. git commit -am ‘add limit’

    git commit -a -m ‘add limit’

  3. branch

  • 删除分支

    git branch -d hotfix

  • 新建分支

    git branch hotfix

  • 当前所有分支清单

    git branch

  • 显示各分支最后一个提交对象的信息

    git branch -v

  • 筛选已经与当前分支合并的分支

    git branch --merged

  • 筛选尚未与当前分支合并的分支

    git branch --no-merged

  1. 推送本地分支:git push (远程仓库名)(分支名)
  • git push origin hotfix
    取出我在本地的 hotfix 分支,推送到远程仓库的 hotfix 分支中去,相当于
    git push origin hotfix:hotfix
  • 若想把远程分支叫做hot
    git push origin hotfix:hot
  • 使用 -f 选项(译注:表示 force,不作检查强制重写)替换远程已有的 featureA 分支(因为新的 commit 并非原来的后续更新)
    git push -f myfork featureA
  • 在远程分支的基础上分化出一个新的分支来(从远程分支 checkout 出来的本地分支,称为 跟踪分支 (tracking branch))
    git checkout -b serverfix origin/serverfix
    也可写为:
    git checkout --track origin/serverfix
    为本地分支设定不同于远程分支的名字:
    git checkout -b sf origin/serverfix
    在跟踪分支里输入 git push,Git 会自行推断应该向哪个服务器的哪个分支推送数据。同样,在这些分支里运行 git pull 会获取所有远程索引,并把它们的数据都合并到本地分支中来。
  1. git status
  2. 远程仓库相关
  • 查看当前远程仓库
    git remote
    git remote -v (显示对应的克隆地址)
  • 添加远程仓库
    git remote add pb git://github.com/paulboone/ticgit.git
    现在可以用字符串 pb 指代对应的仓库地址了。比如说,要抓取所有 Paul 有的,但本地仓库没有的信息,可以运行
    git fetch pb
    现在,Paul 的主干分支(master)已经完全可以在本地访问了,对应的名字是 pb/master,你可以将它合并到自己的某个分支,或者切换到这个分支,看看有些什么有趣的更新。
  • 查看远程仓库信息
    git remote show origin
  • 删除远程仓库
    git remote rm pb
  • 重命名远程仓库
    git remote rename pb paul
  • 从远程仓库抓取数据
    git fetch [remote-name]
    此命令会到远程仓库中拉取所有你本地仓库中还没有的数据。运行完成后,你就可以在本地访问该远程仓库中的所有分支,将其中某个分支合并到本地,或者只是取出某个分支,一探究竟。
    如果是克隆了一个仓库,此命令会自动将远程仓库归于 origin 名下。所以,git fetch origin 会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以来别人提交的更新)。有一点很重要,需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。
    如果设置了某个分支用于跟踪某个远端仓库的分支,可以使用 git pull 命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。
    实际上,默认情况下 git clone 命令本质上就是自动创建了本地的 master 分支用于跟踪远程仓库中的 master 分支(假设远程仓库确实有 master 分支)。所以一般我们运行 git pull,目的都是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中的当前分支。
  1. 分支的合并
  • git checkout master
    gir mergr hotfix
  • git merge --no-commit --squash featureB
    –squash 选项将目标分支上的所有更改全拿来应用到当前分支上,而 --no-commit 选项告诉 Git 此时无需自动生成和记录(合并)提交。这样,你就可以在原来代码基础上,继续工作,直到最后一起提交。
  • 快进(fast forward)
    当前 master 分支所在的提交对象是要并入的 hotfix 分支的直接上游,Git 只需把 master 分支指针直接右移,此时不存在需要解决的分歧
  • 三方合并(Merge made by recursive)
    Git 会用两个分支的末端(C4 和 C5)以及它们的共同祖先(C2)进行一次简单的三方合并计算,对三方合并后的结果重新做一个新的快照,并自动创建一个指向它的提交对象(C6)。这个提交对象比较特殊,它有两个祖先(C4 和 C5)
  1. 分支的衍合
  • git checkout experiment
    git rebase master
    它的原理是回到两个分支最近的共同祖先,根据当前分支(也就是要进行衍合的分支 experiment)后续的历次提交对象(这里只有一个 C3),生成一系列文件补丁,然后以基底分支(也就是主干分支 master)最后一个提交对象(C4)为新的出发点,逐个应用之前准备好的补丁文件,最后会生成一个新的合并提交对象(C3’),从而改写 experiment 的提交历史,使它成为 master 分支的直接下游。
  • git rebase --onto master server client
    取出 client 分支,找出 client 分支和 server 分支的共同祖先之后的变化,然后把它们在 master 上重演一遍
  • 直接把 server 分支衍合到 master,而不用手工切换到 server 分支后再执行衍合操作:git rebase [主分支] [特性分支],命令会先取出特性分支 server,然后在主分支 master 上重演
    git rebase master server
  1. 挑拣(cherry-pick)
    挑拣类似于针对某次特定提交的衍合。它首先提取某次提交的补丁,然后试着应用在当前分支上。如果某个特性分支上有多个提交,但你只想引入其中之一就可以使用这种方法。
    如果你希望拉取e43a6到你的主干分支,可以这样:
git cherry-pick e43a6fd3e94888d76779ad79fb568ed180e5fcdf
  1. git diff
  • 当前分支同其他分支合并时的完整内容差异
    git diff master
    虽然能得到差异内容,但请记住,结果有可能和我们的预期不同。一旦主干 master 在特性分支创建之后有所修改,那么通过 diff 命令来比较的,是最新主干上的提交快照。显然,这不是我们所要的。比方在 master 分支中某个文件里添了一行,然后运行上面的命令,简单的比较最新快照所得到的结论只能是,特性分支中删除了这一行。
  • 实际上我们真正想要看的,是新加入到特性分支的代码,也就是合并时会并入主干的代码。所以,准确地讲,我们应该比较特性分支和它同 master 分支的共同祖先之间的差异。
    可以手工定位它们的共同祖先,然后与之比较
git merge-base contrib master
36c7dba2c95e6bbb78dfa822519ecfec6e1ca649
git diff 36c7db

但这么做很麻烦,所以 Git 提供了便捷的 … 语法。对于 diff 命令,可以把 … 加在原始分支(拥有共同祖先)和当前分支之间

git diff master...contrib
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值