Git初学者的疑问 – git合并和git变基有什么区别?
首先
Git是一种项目管理系统,但我过去一直使用SVN。然而,由于我从前的职位转职,我开始接触之前从未使用过的Git。
当你想将他人在开发工作中所做的更改合并到自己的环境中时,在Git中应该怎么做呢?经过了调查,我发现了一种叫做git merge的方法。然而,在使用它的过程中,我注意到了一件事情。尽管只是执行了合并操作,但提交历史中出现了一个新的提交。这就是所谓的合并提交(merge commit)。
我希望避免除了变更内容之外的提交记录继续增加,因为这会使得回顾工作历史时变得困难。我向团队的前辈请教后得知使用rebase。(我明白如果一开始就询问了合并的方法会更好,但请原谅我这一点。)
本文为了备忘录而总结了关于“git merge”和“git rebase”的区别。
合并git
在当前项目中,我们使用以下方式来操作分支。(本地仓库)
主分支
开发分支
┗特性/A分支
特性/B分支
在我创建并进行feature/A分支的开发工作期间,假设feature/B分支被合并到develop分支。这时我在本地存储库中进行了以下操作。
// 1. リスト1最新のdevelopブランチをローカルにプルする
$ git checkout develop
$ git origin develop pull
// 2. feature/Aブランチをdevelopブランチにマージする
$ git checkout feature/A
$ git merge develop
// 3. origin/feature/Aブランチにプッシュする
$ git push
将版本库的历史简化为一个简单的图表,即如下所示。

“Git 合并分支”
在git rebase中,我们会执行以下操作。
// 1. リスト1最新のdevelopブランチをローカルにプルする
$ git checkout develop
$ git origin develop pull
// 2. feature/Aブランチをdevelopブランチにマージする
$ git checkout feature/A
$ git rebase develop
// 3. origin/feature/Aブランチにプッシュする
$ git push -f origin/feature/A

merge和rebase之间的明显区别是,在将develop分支的更改合并到feature/A分支时,rebase不会创建合并提交。执行git rebase操作会剪切掉feature/A分支的提交,并在develop分支的开头重新创建(复制)这些提交。因此,可以将历史记录整合为一条线,使变更历史更易于查看。
然而,需要注意以下事项。
-
- git pushは強制プッシュ(git push -f)でないとリモートに反映できない。
- rebaseは必ず自分だけが使うブランチでのみ使用する。(複数人が使うブランチでrebaseをすると整合性がとれなくなるため。)
在这种情况下,你会怎么做? zhè xià, nǐ huì zuò?)
如果不小心执行了rebase操作,可以使用以下命令进行纠正。
$ git reflog
// 履歴から戻したいポイントのハッシュ番号を確認
$ git reset --hard HEAD@{番号}
$ git push -f origin ブランチ名
此外,若发生冲突,修复冲突文件并重新提交后,执行以下命令继续进行rebase。
// コンフリクトを解消してrebaseを続行する
$ git rebase --continue
额外的东西
为什么Mac版的SourceTree(Git的客户端工具)默认情况下无法进行强制推送呢?然而,您可以通过进行设置更改等步骤来实现这一功能。详细步骤请参考以下文章:”在Mac版SourceTree中设置允许强制推送(Force Push)”
以上就是。
请提供参考文献。
-
- あなたはmerge派?rebase派?綺麗なGitログで実感したメリット
-
- git rebaseの具体的なメリット
-
- 7. rebaseでマージする
- 間違ってrebaseしてリモートリポジトリにpushしちゃったけど、戻したい