- git rebase
D--E test
A--B--C--F master
git rebase test 在master分支上执行
A--B--D--E--C'--F'
git rebase 和 merge 差异
D--E test
A--B--C--F--G master
产生新的节点(G)
-
git fetch
git fetch origin remote-branch:local-branch
git fetch origin remote-branch # 保存在 .git/FETCH_HEAD
git pull # git fetch && git merge
git pull origin master
= git fetch origin master # HEAD 未变
git merge FETCH_HEAD # HEAD 改变
git fetch orgin # 拉取远程所有分支到本地 -
git rev-parse
解析引用或其他参数,返回哈希值
例如: git rev-parse “branch-name”
git rev-parse “refs/remotes”
git rev-parse “origin/master”
选项 --verify # 验证引用是否存在 -
git checkout [branch name / commit]
清除工作区的修改
选项 -orphan # 无历史commit的分支
-b # 创建一个新的分支
-B # 分支不存在是创建,否则被重置
-f # 忽略工作区和暂存区修改,强制检出
git checkout – file | path
git checkout -b master origin/master
从远程分支检出到本地分支并创建分支 -
git branch
选项
-a # 查看本地和远程分支
-d # 删除分支
-D # 强制删除,有提交未合并也会删除
-r # 查看远程分支
-m oldbranch newbranch # 重命名,-M 强制
-v # 分支的最新一次提交
-vv # 分支对应的远程分支
–merged # 哪些已经合并到当前分支(即直接分支)
–no-merged
git push origin --delete 远程分支 # 删除远程分支
git branch 分支名 # 创建分支
git branch 分支名 引用 # 创建分支与引用关联 -
git clean [option] [–] <path>
选项
-d # 除去未跟踪文件及目录
-f # 强制清除,尽管clean.requireForce为True
-i # 交互式
-n # 不实际删除,只显示会做什么 -
git rev-list
列出一个提交之前的所有提交:git rev-list <commit-id>,其中 是某个特定提交的标识符。列出一个分支的所有提交:git rev-list <branch-name>,其中 是分支的名称。
列出一个范围内的所有提交:git rev-list <commit-id-1>…<commit-id-2>,其中 <commit-id-1> 是起始提交的标识符,<commit-id-2> 是结束提交的标识符。
-
git cherry-pick
A
B D
C- cherry-pick B.C
A
D
B’
C’
会产生新的commitId - git cherry-pick feature # 将feature分支的最新一次提交转移到当前分支
- git cherry-pick A B # A和B
- git cherry-pick A…B # A到B不包含A
- git cherry-pick A^…B # A到B包含A
- 选项
- -s:提交信息末尾追加操作者签名
- -e: 打开外部编辑器,编辑提价信息
- -n: 只更新工作区和暂存区,不产生新的提交,不commit,HEAD不变
- -x: 提交信息添加cherry pick from commit
- –abort:
- –contiue:
- –quit:
- ^: 代表父提交,后跟数字表示第n个父,mater^1
- ~: 相当于连续的n个"^"
- git cherry-pick -m 1
- 1: merged into
- 2: merged from
- cherry-pick B.C
-
git reset
丢弃暂存区修改,回到节点
* --soft: 不删除文件,从本地仓库回到暂存区,工作区无变化
* --hard: 删除文件, 丢弃暂存区修改,并删除文件
A:HEAD
vim four.txt
vim five.txt
vim six.txt
add four.txt
git commit --message “add four.txt”
git add five.txt
git reset HEAD^ --softchanges to be committed: four.txt five.txt untracked files: six.txt
git reset HEAD^ --hard
删除four.txt 和 five.txt untracked files: six.txt
git reset – five.txt --soft # five.txt 从暂存区到工作区
-
HEAD 分离
一般情况:HEAD指向分支,分支指向节点
分离情况:HEAD指向节点git checkout
HEAD 分离到commit id上。
代码push只能通过分支推送