以下是在学习完learngitbranching中的内容后进行的一些总结
(git branch newBranch)可以创建分支名为newBranch的分支
(git checkout name)切换到另一的分支上
(git checkout -b name [指向位置])生成一个新的分支并将其检出,指向位置可以是一个提交记录或一个分支名
(git merge branchName)将当前分支与branchName分支合并
(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件事:
(git cherry-pick <提交号>…)
将一些提交复制到当前所在的位置(HEAD)下面
(git tag v1 c1):v1为标签命名,c1为提交记录(不指定的话默认HEAD指向的记录)
用来描述离你最近的锚点(标签)
(git describe ) 可以是任何能被 Git 识别成提交记录的引用,如果你没有指定的话,Git 会以你目前所检出的位置(HEAD)。
输出的结果:
当 ref 提交记录上有某个标签时,则只输出标签名称
撤回后所做的更改还在,只是处于未加入暂存区状态
PS:对多人一起使用的远程分支是无效的
本地会生成一个origin/master的远程分支(origin为仓库名)
o/master 只有在远程仓库中相应的分支更新了以后才会更新
远程分支有一个特别的属性,在你检出时自动进入分离 HEAD 状态。
从远程仓库获取数据
git fetch 完成了仅有的但是很重要的两步:
git fetch 并不会改变你本地仓库的状态。它不会更新你的 master 分支,也不会修改你磁盘上的文件。
当远程分支中有新的提交时,你可以像合并本地分支那样来合并远程分支。也就是说就是你可以执行以下命令:
Git fetch 的参数
git fetch
(git fetch origin foo)Git 会到远程仓库的 foo 分支上,然后获取所有本地不存在的提交,放到本地的 o/foo 上。
git fetch origin
先抓取更新再合并到本地分支
git pull 参数
git pull origin foo 相当于:git fetch origin foo; git merge o/foo
将你的变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录。本地的远程分支 (origin/master) 也同样被更新了。
当 git push 时,如果远程仓库中的分支已经被别人更新,Git 是不会允许你 push
变更的。实际上它会强制你先合并远程最新的代码,然后才能分享你的工作。
需要做的就是使你的工作基于最新的远程分支。
我们用 git fetch 更新了本地仓库中的远程分支,然后用 rebase(当然merge也可以) 将我们的工作移动到最新的提交记录下,最后再用 git push 推送到远程仓库。
git push 的参数
git push
(git push origin master)切到本地仓库中的“master”分支,获取所有的提交,再到远程仓库“origin”中找到“master”分支,将远程仓库中没有的提交记录都添加上去。
同时指定源和目的地:git push origin
可以指定source的位置,更新到远程仓库的destination分支上(如果远程仓库中没有destination分支,会自动创建)
HEAD 是一个对当前检出记录的符号引用,总是指向当前分支上最近一次提交记录
当master被锁定,需要一些Pull Request流程来合并修改。如果你直接提交(commit)到本地master, 然后试图推送(push)修改,会被远程服务器拒绝。
解决方法:新建一个分支feature, 推送到远程服务器.(不要对master进行推送) 然后reset你的master分支和远程服务器保持一致, 否则下次你pull并且他人的提交和你冲突的时候就会有问题。
可以让任意分支跟踪 origin/master, 然后该分支会像 master 分支一样得到隐含的 push 目的地以及 merge 的目标。
有两种方法设置这个属性:
在 git push 或 git fetch 不指定任何 source时:
git push origin :side通过给 push 传空值 source,成功删除了远程仓库中的 foo 分支
git fetch origin :bugFix 如果 fetch 空 到本地,会在本地创建一个新分支。