Git 合并的两种方式
2019-04-20 本文已影响0人
yangjingqzp
Merge 和 Rebase 比较
merge 合并。
如 要合并分支 branch_a 到 master :
- 切换到要合并到的分支: git checkout master
- 合并指定分支到本分支: git merge branch_a
原理:
以 branch_a 和 master 两分支的共同祖先 commit1 为基础,将 branch_a 分支的提交合并到 master 分支,可能会产生一个新的提交(当两个分支都在共同祖先 commit1 中发生了变化时),合并后 branch_a 分支上的历史提交信息在 master 上得到保留。
Rebase 变基
如 要将分支 branch_a 变基到分支 master :
- 切换到需要变基的分支: git checkout branch_a
- 对当前分支进行变基: git rebase master
- 切换到需要变基到的分支: git checkout master
- 合并变基后的分支到本分支: git merge branch_a
原理:
以 branch_a 和 master 两分支的共同祖先 commit1 为基础,将 branch_a 分支的所有修改,在 master 分支按顺序重新做一次提交。
这里分为了 2 步: - 对要合并的分支进行变基。可以简单理解为变更了 branch_a 分支的基础(从 commit1 变为了 master ),此时是将 branch_a 分支在 commit1 后的提交重新在 master 上进行一次提交
- 然后将变基后的分支合并到 master
其他命令回顾
备忘
仓库操作
- git init
初始化 git 仓库。
# 初始化仓库(默认为当前目录)
git init
- git config
用来配置本地的 git
# 配置 git 使用的用户名(可以指定为全局)
git config user.name <name>
git config --global user.name <name>
git config --global user.email <email>
- git clone
克隆仓库到本地。
# 克隆指定git仓库到指定目录(默认为仓库名称),-o 指定克隆到本地的主机名(默认为 origin )
git clone -o <版本库地址> <本地目录名>
- git remote
列出所有远程主机
# 列出远程主机,包含主机地址
git remote -v
# 查看远程主机的信息
git remote show <主机名>
# 添加主机
git remote add <主机名> <版本库地址>
# 删除主机
git remote rm <主机名>
常用本地基本操作
- git add
添加指定的内容到 git 的索引库中,当使用 git commit 时,git 将依据索引库中的内容来进行文件的提交。
# 添加所有的修改到索引库
git add *
# 添加指定文件夹或文件到索引库
git add <path>
- git commit
将本地的索引库中的内容添加到本地仓库中
# 提交并指定提交信息
git commit -m "commit message"
- git stash
保存当前工作区内容存储到暂存区。
# 查看暂存区当前的所有暂存内容
git stash list
# 从暂存区恢复最近的内容(或者指定的内容)
git stash pop [stash_id]
# 查看当前暂存区的修改内容
git stash show
使用场景:当前开发还未完成,不能提交,但是又需要去做其他事情时。
-
git status
查看当前工作区和暂存区的状态信息 -
git log
查看git提交的历史记录信息
# 用图像,并在一行显示一条记录
git log --graph --pretty=oneline
# 显示本地所有的 git 操作记录
git reflog
分支操作
- git branch
列出分支
# 列出本地所有分支
git branch -a
# 列出远程所有分支
git branch -r
# 在当前所在提交上新建分支,并切换到新建的分支
git branch -b <new_branch_name>
# 删除分支
git branch -d <branch_name>
- git checkout
切换分支;查看旧版本;舍弃工作区的修改
# 切换到 dev 分支
git checkout dev
# 以远程文件覆盖本地指定文件
git checkout <file>
- git reset
重置当前分支到指定的提交
# 重置当前分支到上一次提交,这里会丢失上次提交的内容
git reset --hard HEAD
参数 | 作用 |
---|---|
--soft | 暂存区和工作区会留下被重置提交的修改 |
--mixed | 工作区被重置到指定提交,暂存区会留下被重置的提交内容 |
--hard | 暂存区和工作区都重置到指定提交,被重置的提交全部丢失 |
- git revert
通过提交一个新的提交来重置到指定的提交
# 创建一个提交,来重置到前2个提交
git reset HEAD~1
- git cherry-pick
遴选:复制指定的提交,并在当前分支做一次完全一样的提交
# 将提交 commit-n 复制出在,并在当前分支做一次一样的提交
git cherry-pick commit-n
使用场景:在某一个分支上做的一次修改需要单独先提交的 master 分支
远程相关操作
- git fetch
获取远程版本库的分支信息,更新到指定当前主机名
# 获取主机名对应的远程版本库的指定分支信息,如果无指定分支名时获取所有的分支信息
git fetch <主机名> <分支名>
- git pull
获取远程主机某个分支的更新,并合并到本地指定分支(如果远程分支与当前分支合并,可不指定本地分支名)
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull master 相当于 git fetch origin master 和 git merge origin master.
- git push
将本地分支的更新,推送到远程主机
git push <远程主机名> <本地分支名>:<远程分支名>