提交到版本库:git commit
切换到新分支:git checkout -b newBranch
合并分支:git merge xxx
单线合并:git rebase xxx
*HEAD 是一个对当前检出记录的符号引用,总是指向当前分支上最近一次提交记录
cat .git/HEAD 或者git symbolic-ref HEAD查看HEAD的指向
HEAD可以分离,指向某一commit
查看提交记录的哈希值:git log
相对引用:1.使用 ^ 向上移动 1 个提交记录;2.使用 ~<num> 向上移动多个提交记录,如 ~3
将 master 分支强制指向 HEAD 的第 3 级父提交:git branch -f master HEAD~3
撤销改动:git reset HEAD^
远程撤销改动,但会提交一个commit,然后再push就可以同步远程撤销:git revert
将一些提交复制到当前所在的位置(HEAD):git cherry-pick commitid commitid
交互式rebase,修改commit的顺序、合并方式:git rebase -i HEAD~4(commitid)
修改commit:git commit --amend
建立标签:git tag tagname commitId
命令用来描述离你最近的锚点(也就是标签):git describe <ref>(提交的引用)
多个父节点选择^:git checkout master^n(从右到左第几)
克隆远程分支:git clone
你的远程仓库默认为 origin,本地仓库多了一个名为 o/master 的分支, 这种类型的分支就叫远程分支,远程分支反映了远程仓库(在你上次和它通信时)的状态,远程分支有一个特别的属性,在你检出时自动进入分离 HEAD 状态。
从远程仓库获取数据时, 远程分支也会更新以反映最新的远程仓库:git fetch
git fetch 完成了仅有的但是很重要的两步:
- 从远程仓库下载本地仓库中缺失的提交记录
- 更新远程分支指针(如 o/master)
git fetch 和 git merge <just-fetched-branch> 的缩写:git pull
推送到远程:git push
*git push 不带任何参数时的行为与 Git 的一个名为 push.default 的配置有关。
推送标准公式:
git fetch; git rebase o/master; git push=》git pull --rebase; git push
远程跟踪:master 和 o/master 的关联关系就是由分支的“remote tracking”属性决定的。当你克隆仓库的时候, Git 就自动帮你把这个属性设置好了。
当你克隆时, Git 会为远程仓库中的每个分支在本地仓库中创建一个远程分支(比如 o/master)。然后再创建一个跟踪远程仓库中活动分支的本地分支,默认情况下这个本地分支会被命名为 master。
通过远程分支检出一个新的分支:git checkout -b localbranchname origin/master
设置远程追踪分支:git branch -u origin/master foo
为 push 指定参数:git push <remote> <place>
把本地的 foo 分支推送到远程仓库中的 bar 分支:
git push origin <source>:<destination>
为 fetch指定参数git fetch <remote> <place>
git fetch origin <source>:<destination>,source 现在指的是远程仓库中的位置,而 <destination> 才是要放置提交的本地仓库的位置。它与 git push 刚好相反,git pull同理
古怪的 <source>:
- 可以在 git push 或 git fetch 时不指定任何 source,方法就是仅保留冒号和 destination 部分,source 部分留空。
git push origin :side 删除目的分支
git fetch origin :bugFix 新建一个分支