Git总结

以下是在学习完learngitbranching中的内容后进行的一些总结

本地


git commit


git branch

  (git branch newBranch)可以创建分支名为newBranch的分支


git checkout

  (git checkout name)切换到另一的分支上
  (git checkout -b name [指向位置])生成一个新的分支并将其检出,指向位置可以是一个提交记录或一个分支名


git merge

  (git merge branchName)将当前分支与branchName分支合并


git rebase

  (git rebase branchName)与merge作用一致,但可以创建更加线性的提交历史
  (git rebase branch1 branch2)将branch2合并到branch1上
  当master(任一分支节点)为bugFix的父提交时(git rebase bugFix master)相当于将两个分支合并,并指向master

git rebase的参数

  (git rebase -i HEAD~4):将HEAD的前四个提交进行调整 Git 会打开一个 UI 界面并列出将要被复制到目标分支的备选提交记录,还会显示每个提交记录的哈希值和提交说明。

当 rebase UI界面打开时, 你能做3件事:

  1. 调整提交记录的顺序
  2. 删除你不想要的提交
  3. 合并提交。

git cherry-pick

   (git cherry-pick <提交号>…)
  将一些提交复制到当前所在的位置(HEAD)下面


git tag

  (git tag v1 c1):v1为标签命名,c1为提交记录(不指定的话默认HEAD指向的记录)


git describe

  用来描述离你最近的锚点(标签)

  (git describe <ref>) <ref> 可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会以你目前所检出的位置(HEAD)。

  • tag : 离 ref 最近的标签
  • numCommits : 这个 ref 与 tag 相差有多少个提交记录
  • hash : 你所给定的 ref 所表示的提交记录哈希值的前几位。

  输出的结果:<tag>_<numCommits>_g<hash>

当 ref 提交记录上有某个标签时,则只输出标签名称


git reset

  撤回后所做的更改还在,只是处于未加入暂存区状态
  PS:对多人一起使用的远程分支是无效的

git revert

  撤销更改并分享给别人(与上面命令区别)
在这里插入图片描述


远程仓库

git clone

  本地会生成一个origin/master的远程分支(origin为仓库名)
  o/master 只有在远程仓库中相应的分支更新了以后才会更新
  远程分支有一个特别的属性,在你检出时自动进入分离 HEAD 状态。


git fetch

  从远程仓库获取数据

   git fetch 完成了仅有的但是很重要的两步:

  • 从远程仓库下载本地仓库中缺失的提交记录
  • 更新远程分支指针(如 origin/master)

  git fetch 并不会改变你本地仓库的状态。它不会更新你的 master 分支,也不会修改你磁盘上的文件。

  当远程分支中有新的提交时,你可以像合并本地分支那样来合并远程分支。也就是说就是你可以执行以下命令:

  • git cherry-pick o/master
  • git rebase o/master
  • git merge o/master
    等等
Git fetch 的参数

git fetch <remote> <place>
(git fetch origin foo)Git 会到远程仓库的 foo 分支上,然后获取所有本地不存在的提交,放到本地的 o/foo 上。
git fetch origin <source>:<destination> 如果destination分支在本地没有,会自动创建


git pull

  先抓取更新再合并到本地分支

  • git pull 是 fetch 和 merge 的简写
  • git pull --rebase 是 fetch 和 rebase 的简写
git pull 参数

  git pull origin foo 相当于:git fetch origin foo; git merge o/foo


git push

  将你的变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录。本地的远程分支 (origin/master) 也同样被更新了。

当 git push 时,如果远程仓库中的分支已经被别人更新,Git 是不会允许你 push
变更的。实际上它会强制你先合并远程最新的代码,然后才能分享你的工作。

需要做的就是使你的工作基于最新的远程分支。
  我们用 git fetch 更新了本地仓库中的远程分支,然后用 rebase(当然merge也可以) 将我们的工作移动到最新的提交记录下,最后再用 git push 推送到远程仓库。

git push 的参数

  git push <remote> <place>
  (git push origin master)切到本地仓库中的“master”分支,获取所有的提交,再到远程仓库“origin”中找到“master”分支,将远程仓库中没有的提交记录都添加上去。

  同时指定源和目的地:git push origin <source>:<destination>
可以指定source的位置,更新到远程仓库的destination分支上(如果远程仓库中没有destination分支,会自动创建)


HEAD

HEAD 是一个对当前检出记录的符号引用,总是指向当前分支上最近一次提交记录
在这里插入图片描述


git中的相对引用

  • 使用 ^ 向上移动 1 个提交记录
    (^数字)如果当前分支有多个父提交,可以用来指定移动到哪一个提交
  • 使用 ~ 向上移动多个提交记录,如 ~3
    (git checkout master^) 让HEAD指向master提交的父提交
    (git branch -f master HEAD~3)强制将 master 指向 HEAD 的第 3 父提交
  • 可以使用缩写形式
    (git checkout HEAD~^2~2)
    在这里插入图片描述

远程服务器拒绝!(Remote Rejected)

  当master被锁定,需要一些Pull Request流程来合并修改。如果你直接提交(commit)到本地master, 然后试图推送(push)修改,会被远程服务器拒绝。

  解决方法:新建一个分支feature, 推送到远程服务器.(不要对master进行推送) 然后reset你的master分支和远程服务器保持一致, 否则下次你pull并且他人的提交和你冲突的时候就会有问题。


远程跟踪分支

  • pull 时, 提交记录会被先下载到 o/master 上,之后再合并到本地的 master 分支。隐含的合并目标由这个关联确定的。
  • push 时, 我们把工作从 master 推到远程仓库中的 master 分支(同时会更新远程分支 o/master) 。
  • clone 时, Git 会为远程仓库中的每个分支在本地仓库中创建一个远程分支(比如 o/master)。然后再创建一个跟踪远程仓库中活动分支的本地分支,默认情况下这个本地分支会被命名为 master。

  可以让任意分支跟踪 origin/master, 然后该分支会像 master 分支一样得到隐含的 push 目的地以及 merge 的目标。

有两种方法设置这个属性:

  1. 通过远程分支检出一个新的分支,执行: git checkout -b totallyNotMaster o/master
    可将一个并不叫 master 的分支上的工作推送到了远程仓库中的 master 分支
  2. 设置远程追踪分支的方法就是使用:git branch -u 命令,执行:
    git branch -u o/master foo 这个命令更明确

关于参数<source>

  在 git push 或 git fetch 不指定任何 source时:
  git push origin :side通过给 push 传空值 source,成功删除了远程仓库中的 foo 分支
  git fetch origin :bugFix 如果 fetch 空 到本地,会在本地创建一个新分支。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值