git - git merge --ff <commit> 和 git reset <commit> --mixed 有什么区别

标签 git git-merge git-reset fast-forward

如果我想更新我的本地分支,请说 master ,到远程分支gitlab/master ,我看到两个选项:

  • 我可以使用快进 merge 将本地分支与远程分支 merge 。
  • 我可以使用重置将我的分支移动到远程分支的位置。

第一个操作可以在我的SmartGit GUI中通过右键单击来实现:merge 。后一种操作可以通过将本地分支标记拖动到新位置来实现。

git merge --ff <commit> 之间有任何技术差异吗?和git reset <commit> --mixed

我承认重置也可以用于将本地分支移动到另一个分支,这不是快进的方式。

最佳答案

如果 merge 解析为快进,则应该没有差异,但如果情况并非如此:

  • 如果您使用 git merge,您将拥有 merge 提交以及来自两个分支的所有提交。
  • 如果您使用 git reset,您将只有来自 gitlab/master 的提交,而没有 merge 提交。 gitlab/master 中缺少的 master 提交将被取消提交(重置),但其内容将出现在工作目录中。

您可以自己尝试一下,有以下两种场景:

(初始化,常见两种场景,我们使用master作为gitlab/masterbranch1作为master )

# Common commit
git init
echo a > a; git add .; git commit -m"a"
# Commit on branch1
git checkout -b branch1
git init
echo b > b; git add .; git commit -m"b"
# Second commit on master
git checkout master~1
echo c > c; git add .; git commit -m"c"

( merge 场景)

git checkout branch1
git merge master

(重置场景)

git checkout branch1
git reset master

另请注意,选项 --ff--mixed 都是默认选项,可以省略。

关于git - git merge --ff <commit> 和 git reset <commit> --mixed 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46758289/

相关文章:

Git merge 单个文件而无需 rebase

git恢复 merge : determine which parent is which (-m 1 vs -m 2)

git - 使用 git 从远程存储库获取干净的副本

git - Webstorm Git 新建远程仓库 : Push to origin/master was rejected

ruby - 我可以获取以 grit 发出的 git clone 命令的进度,输出到标准输出吗?

git - 如何在 SourceTree 中 merge develop 分支到 master 分支?

git - 为什么在 git merge origin/master 中需要 "master"?

Git:无法撤消本地更改(错误:路径...未 merge )

git - 在不丢失历史记录的情况下恢复到特定提交

git - 仅使用 pull 请求回滚 master 分支(不重置,不直接推送到 master 等)