Git 合并的两种方式

2019-04-20  本文已影响0人  yangjingqzp

Merge 和 Rebase 比较

merge 合并。
如 要合并分支 branch_a 到 master :

  1. 切换到要合并到的分支: git checkout master
  2. 合并指定分支到本分支: git merge branch_a
    原理:
    以 branch_a 和 master 两分支的共同祖先 commit1 为基础,将 branch_a 分支的提交合并到 master 分支,可能会产生一个新的提交(当两个分支都在共同祖先 commit1 中发生了变化时),合并后 branch_a 分支上的历史提交信息在 master 上得到保留。

Rebase 变基
如 要将分支 branch_a 变基到分支 master :

  1. 切换到需要变基的分支: git checkout branch_a
  2. 对当前分支进行变基: git rebase master
  3. 切换到需要变基到的分支: git checkout master
  4. 合并变基后的分支到本分支: git merge branch_a
    原理:
    以 branch_a 和 master 两分支的共同祖先 commit1 为基础,将 branch_a 分支的所有修改,在 master 分支按顺序重新做一次提交。
    这里分为了 2 步:
  5. 对要合并的分支进行变基。可以简单理解为变更了 branch_a 分支的基础(从 commit1 变为了 master ),此时是将 branch_a 分支在 commit1 后的提交重新在 master 上进行一次提交
  6. 然后将变基后的分支合并到 master

其他命令回顾

备忘

仓库操作

  1. git init
    初始化 git 仓库。
# 初始化仓库(默认为当前目录)
git init
  1. git config
    用来配置本地的 git
# 配置 git 使用的用户名(可以指定为全局)
git config user.name <name>
git config --global user.name <name>
git config --global user.email <email>
  1. git clone
    克隆仓库到本地。
# 克隆指定git仓库到指定目录(默认为仓库名称),-o 指定克隆到本地的主机名(默认为 origin )
git clone -o <版本库地址> <本地目录名>
  1. git remote
    列出所有远程主机
# 列出远程主机,包含主机地址
git remote -v
# 查看远程主机的信息
git remote show <主机名>
# 添加主机
git remote add <主机名> <版本库地址>
# 删除主机
git remote rm <主机名>

常用本地基本操作

  1. git add
    添加指定的内容到 git 的索引库中,当使用 git commit 时,git 将依据索引库中的内容来进行文件的提交。
# 添加所有的修改到索引库
git add *
# 添加指定文件夹或文件到索引库
git add <path>
  1. git commit
    将本地的索引库中的内容添加到本地仓库中
# 提交并指定提交信息
git commit -m "commit message"
  1. git stash
    保存当前工作区内容存储到暂存区。
# 查看暂存区当前的所有暂存内容
git stash list
# 从暂存区恢复最近的内容(或者指定的内容)
git stash pop [stash_id]
# 查看当前暂存区的修改内容
git stash show

使用场景:当前开发还未完成,不能提交,但是又需要去做其他事情时。

  1. git status
    查看当前工作区和暂存区的状态信息

  2. git log
    查看git提交的历史记录信息

# 用图像,并在一行显示一条记录
git log --graph --pretty=oneline
# 显示本地所有的 git 操作记录
git reflog

分支操作

  1. git branch
    列出分支
# 列出本地所有分支
git branch -a
# 列出远程所有分支
git branch -r
# 在当前所在提交上新建分支,并切换到新建的分支
git branch -b <new_branch_name>
# 删除分支
git branch -d <branch_name>
  1. git checkout
    切换分支;查看旧版本;舍弃工作区的修改
# 切换到 dev 分支
git checkout dev
# 以远程文件覆盖本地指定文件
git checkout <file>
  1. git reset
    重置当前分支到指定的提交
# 重置当前分支到上一次提交,这里会丢失上次提交的内容
git reset --hard HEAD
参数 作用
--soft 暂存区和工作区会留下被重置提交的修改
--mixed 工作区被重置到指定提交,暂存区会留下被重置的提交内容
--hard 暂存区和工作区都重置到指定提交,被重置的提交全部丢失
  1. git revert
    通过提交一个新的提交来重置到指定的提交
# 创建一个提交,来重置到前2个提交
git reset HEAD~1
  1. git cherry-pick
    遴选:复制指定的提交,并在当前分支做一次完全一样的提交
# 将提交 commit-n 复制出在,并在当前分支做一次一样的提交
git cherry-pick commit-n

使用场景:在某一个分支上做的一次修改需要单独先提交的 master 分支

远程相关操作

  1. git fetch
    获取远程版本库的分支信息,更新到指定当前主机名
# 获取主机名对应的远程版本库的指定分支信息,如果无指定分支名时获取所有的分支信息
git fetch <主机名> <分支名>
  1. git pull
    获取远程主机某个分支的更新,并合并到本地指定分支(如果远程分支与当前分支合并,可不指定本地分支名)
git pull <远程主机名> <远程分支名>:<本地分支名>

git pull master 相当于 git fetch origin master 和 git merge origin master.

  1. git push
    将本地分支的更新,推送到远程主机
git push <远程主机名> <本地分支名>:<远程分支名>
上一篇下一篇

猜你喜欢

热点阅读