git常用命令

git merge / git rebase

​ git merge不会改变原有的提交记录,而git rebase则会将feature分支上的修改以补丁的形式附加到master分支之后。git merge 可以忠实的保留提交历史,而git rebase则可以使提交记录更整洁。(变基需要注意的问题:如果已经提交到公共仓库,则他人可能在此基础上进一部开发,则不建议对这些提交进行变基)

# git merge的操作流程
## 先切换到主分支的最前端
git checkout master
## merge feature
git merge feature
## 解决冲突
## 添加并提交
git add ./
git commit -m "solve the conficts"
# git rebase的操作流程
## 先切换到feature分支
git checkout feature
## 变基
git rebase master
## 解决冲突
## 提交
git add ./
## 继续变基
git rebase --continue ## 会提示先修改一下上一个feature的提交信息
## 解决冲突
## 提交
git add ./
## 继续变基
## ...
# 进行一次fast-forward将master移动到主分支最前面
git checkout master
git merge feature
## 最后看删除feature分支feature分支指南
git branch -d feature

### 此外还可以通过 git rebase -i 来合并多条提交记录
git rebase -i HEAD~3

git merge合并后的图

git rebase合并后的图

git log / git reflog

​ git log可以查看commit的提交,而git reflog则用于查看所以的HEAD指针历史,包括已经删除的。此外给git reflog只是查看本地的。

# git log 用法
## 查看所有提交
git log 
## 查看提交的差异
git log -p
## 查看最近两次提交的差异
git log -p -2
## 按一定的形式显示提交历史
git log --pretty=format:"%h - %an, %ar : %s"
## 以ascii字符的形式显示所有的提交历史
git log --oneline --decarate --graph --all
# git reflog 用法
## 按时间查看引用日志
git reflog
## git reflog 一般和git show git reset --hard 配合使用
## 用来恢复已经删除的提交节点

​ 详细的format参数

git cherry-pick

​ 将某些分支转移到其他分支。使用起来比较灵活,但不是最佳实践,会造成相同节点重复的提交,在大多数情况都可以使用git merge代替。

# 基本命令
git cherry-pick HASH
## 当然之后还是要解决冲突
# 移动多个
git cherry-pick hashA hashB
# 移动连续的多个
git cheery-pick hashA..HashB

git push / git pull

​ git push用来推送一个分支到远程仓库,git pull则用来从远程仓库抓取分支并合并到当前进行的分支中。

# git push 基本用法
## git push <remote> <remote_branch>:<local_branch>
## 和当前branch合并时:<local_branch>可以省略
## 默认只有通过fast-forward能够merge才能成功。除非加--force选项
git push origin master
git push origin serverfix
## 除此之外,--all 会推送所有分支; --tags 会推送标记 --delete 删除远程分支
# git pull 基本用法
##git pull <remote> <remote_branch>:<local_branch>
## 相当于 git fetch and git merge
# 一般用法
git pull <remote>
## merge时不创建新的commit
git pull --no-commit <remote>
## 采用变基的方式合并
git pull --rebase <remote>
## 输出pull过程中的详细信息
## git pull --verbose