git基本命令
git commit
:提交
git branch (newImage)
:创建分支
git merge (bugFix)
:我们要把 bugFix 合并到 master 里
git rebase (side)
:把选中的 master分支里的工作直接移到 side分支上。移动以后会使得两个分支的功能看起来像是按顺序开发,但实际上它们是并行开发的。
注意,提交记录 C3 依然存在(树上那个半透明的节点),而 C3' 是我们 Rebase 到 master 分支上的 C3 的副本。
git rebase (side) (another)
:把another分支放到side下面
git tag (v1) (c1)
:给c1标签命名为v1
在这种情况下:
git describe master
会输出:v1_2_gC2
git describe side
会输出:v2_1_gC4
git高级命令
HEAD 是一个对当前检出记录的符号引用 —— 也就是指向你正在其基础上进行工作的提交记录。HEAD 总是指向当前分支上最近一次提交记录。大多数修改提交树的 Git 命令都是从改变 HEAD 的指向开始的。HEAD 通常情况下是指向分支名的(如 bugFix)。在你提交时,改变了 bugFix 的状态,这一变化通过 HEAD 变得可见。
**^
:相对引用,向父1级
~3
:相对引用,向父3级
git cherry-pick (c2 c4)
:类似于rebase**
交互式rebase:
指的是使用带参数 --interactive
的 rebase 命令, 简写为 -i
,git rebase -i (overHere) --solution-ordering c3,c4,c5
多个父节点:
git checkout HEAD~
git checkout HEAD^2
git checkout HEAD~2
也可以写出一句:git checkout HEAD~^2~2
提交技巧
1
接下来这种情况也是很常见的:你之前在 newImage 分支上进行了一次提交,然后又基于它创建了 caption 分支,然后又提交了一次。此时你想对的某个以前的提交记录进行一些小小的调整。比如设计师想修改一下 newImage 中图片的分辨率,尽管那个提交记录并不是最新的了。
我们可以通过下面的方法来克服困难:
先用git rebase -i
将提交重新排序,然后把我们想要修改的提交记录挪到最前
然后用commit --amend
来进行一些小修改
接着再用git rebase -i
来将他们调回原来的顺序
最后我们把master
移到修改的最前端(用你自己喜欢的方法),就大功告成啦!
当然完成这个任务的方法不止上面提到的一种(我知道你在看 cherry-pick 啦),之后我们会多点关注这些技巧啦,但现在暂时只专注上面这种方法。
最后有必要说明一下目标状态中的那几个'
—— 我们把这个提交移动了两次,每移动一次会产生一个'
;而 C2 上多出来的那个是我们在使用了amend
参数提交时产生的,所以最终结果就是这样了。
也就是说,我在对比结果的时候只会对比提交树的结构,对于'
的数量上的不同,并不纳入对比范围内。只要你的master
分支结构与目标结构相同,我就算你通过。
远程仓库
git clone
:克隆到远程仓库
git fetch
:下载远程仓库
-
从远程仓库下载本地仓库中缺失的提交记录
-
更新远程分支指针(如 o/master)
git fetch
实际上将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态。远程分支反映了远程仓库在你最后一次与它通信时的状态,git fetch
就是你与远程仓库通信的方式了!希望我说的够明白了,你已经了解 git fetch 与远程分支之间的关系了吧。
git fetch
通常通过互联网(使用 http:// 或 git:// 协议) 与远程仓库通信。
git fetch
常常与git merge
联用,将远端仓库文件下载后在合并到本地仓库
git pull
:就是git fetch
常常与git merge
合成的一句话,效果相同
git fakeTeamwork (too) (3)
:通过一个命令,我们就模拟队友推送了 3 个提交记录到远程仓库的 foo 分支。
git push
:与pull相反,从本地到远端,git push --rebase
:以rebase方式推到远端