検索
ホームページ開発ツールGitgit-rebase と git-merge は何をしますか?違いは何ですか?

git-rebase と git-merge は何をしますか? git-rebase と git-merge の違いは何ですか? git-rebaseとgit-mergeの違いについては以下の記事で紹介していますので、ご参考になれば幸いです。

git-rebase と git-merge は何をしますか?違いは何ですか?

バージョン管理に Git を使用することは、ほとんどのエンジニアが毎日遭遇するワークフローの 1 つであるはずですが、私が使用しているのは push, # にすぎません。 ##pullmergecheckout または log およびその他の指示。さらに詳しく調べると、それについては何もわかりません。インタビュー中に次の質問がされました: 「Git のマージとリベースの違いを知っていますか?」

私はそれを聞いてすぐに混乱しました。私にとって、リベースはコミットを整理するために使用されるツールであり、実際に機能します。マージと比較しますか? [推奨学習: "

Git チュートリアル "]

git-rebase

まず、私が普段 rebase コマンドを使用する目的について話します。新しい単体テストを追加して

commit を実行すると、log には commit:

## という追加のレコードが含まれます。

##しかし、コミット後に別のテストケースを書き忘れていたことが判明したので、それを補って再度コミットしました。 git-rebase と git-merge は何をしますか?違いは何ですか?

# この時点では、レコードには別の git-rebase と git-merge は何をしますか?違いは何ですか?commit

がありますが、私にとって、これら 2 つの

commit は実際には同じことを行っているため、リモートにプッシュする前に、最初にコミットを整理する必要があります。そして 2 つのレコードをマージします。 これら 2 つのレコードをマージするには 2 つの方法があります。1 つ目は、最初のテスト ケースを追加する前に reset

し、その後直接

commit を実行することです。 2 番目の方法は、rebase を使用してこれを処理することです。 まず現在のログを見てみましょう:

私の目的は、git-rebase と git-merge は何をしますか?違いは何ですか?9dc67ff

87af945# を結合することです。 ## 1 つに編成されるため、調整されるコミットは init からのもの、つまりコミット ID が 7eb57cb 以降のすべてのコミットです。rebase コマンドと組み合わせると、次のようになります: <pre class="brush:php;toolbar:false">git rebase -i 7eb57cb</pre> 入力後、vim 編集画面にジャンプします:

7eb57cbgit-rebase と git-merge は何をしますか?違いは何ですか? 以降のすべてのコミットが表示されます。 (現在は

9dc67ff

87af945 のみ)、次に 9dc67ffpicksquash に変更します。これはマージを意味します。それを前のコミットと一緒にします。まず i をクリックしてから、vim でコンテンツの編集を開始します。

編集後、esc をクリックして

:wq git-rebase と git-merge は何をしますか?違いは何ですか? と入力して保存できます。興味があるだけなので、Play にアクセスして見てください。保存したくない場合は、「

:q!

」と入力してください。上記の処理が完了した後、再度ログを確認すると、2 つのコミットが 1 つになっていることがわかります。保存後、コミットメッセージ画面にジャンプします。ここでマージされたコミットメッセージを入力できますが、変更せずに直接保存します。プロセスを確認し、ログを再度確認すると、2 つのコミットが 1 つになっていることがわかります。

まず、上記の操作は、git rebase のリベースの対話モードです。後で入力した -i は、実際には

interactivegit-rebase と git-merge は何をしますか?違いは何ですか? の省略形です。

git-merge

git-rebase と git-merge は何をしますか?違いは何ですか?

新しい機能を実行するときは、通常、ブランチを取り出してから

merge# するため、誰もがマージ コマンドに精通している必要があります。 ## masterやdevelopなどのメインブランチに戻ります。操作プロセスは次のとおりです。

在 merge 的时候会有两种情况,第一种是  fast-forward,会把被合并分支的 HEAD 的 reference 移到要合併分支内最新的 commit 上,上方操作的 merge 结果就是 fast-forward,master 的 HEAD 被移到 string-library 的最新 commit,画成图的话就是这样子:

git-rebase と git-merge は何をしますか?違いは何ですか?

但是如果在执行 merge 的时候产生冲突,那分支的合并行为就会和 fast-forward 有点不同了。举例来说,我分别在 master 和 string-library 的同一个文件添加内容,那当我执行 merge 的时候就会要求先修复冲突:

git-rebase と git-merge は何をしますか?違いは何ですか?

修复完后,再执行 commit 完成合并,而这一次合并时,会再多一个 commit 是有关 merge 了 string-library 分支的纪录:

git-rebase と git-merge は何をしますか?違いは何ですか?

这个情况画成图就会像这样子:

git-rebase と git-merge は何をしますか?違いは何ですか?

git-rebase 与 git-merge 的差异

看完上方对 rebasemerge 的介绍后,你也许会想说:

「咦?那这两个不是完全不同的东西吗?」

对的,原本我也是这麽认为,一直到我去看了 git-rebase 的文档,才发现原来我一直误会它了。在 git book 的 rebase 篇章,第一段就说明了,在 Git 里有两种方法可以用来整合两个分支,而这两个在上方都有提到,分别为 mergerebase

git-rebase と git-merge は何をしますか?違いは何ですか?

从上方的 merge 例子已经知道了,merge 在合并的时候会有 fast-forward,和冲突时用一个 commit 记录合并变更的两种情形。而 rebase 的整合方式非常有趣,依照关于 rebase 的另一段说明,它可以「把某个分支中所有 commit 的过程,以另一个分支的 commit 为基础重播一遍」:

git-rebase と git-merge は何をしますか?違いは何ですか?

这是什麽意思呢?首先让我们回到上述的例子,并在 master 分支上用 reset,让 master 的版本回到合并 string-library 之前:

git-rebase と git-merge は何をしますか?違いは何ですか?

现在我们要用 rebase 指令,将 string-library 所有的 commit 修改,以 master 的 commit 为基础跑一次。使用 rebase 合并的第一步,要先切到想重播 commit 的分支:

git checkout string-library

然后再输入 git rebase 指令,并于后方指定要在哪个分支上重播:

git rebase master

执行结果:

git-rebase と git-merge は何をしますか?違いは何ですか?

在 rebase 重播 commit 的过程中,和 merge 相似的地方在于,如果有冲突的话还是需要解决,但在解决后,并不是使用 commit 指令进行合并,而是要输入 git rebase --continue,让 rebase 可以继续重播接下来的 commit:

git-rebase と git-merge は何をしますか?違いは何ですか?

重播完成时,会显示目前重播到哪个 commit,以 string-library 来说就是最新的add string unit test D。这时候的分支关系,画成图就会变成:

git-rebase と git-merge は何をしますか?違いは何ですか?

上图在经过 rebase 之后,string-library 里 07e38fb 修改,会以 master 的 commit 为基底再重播一次。

需要注意的是,重播后的 commit id 会和原本的不一样,这等于完全改写了分支内所有的 commit 历史纪录。

さらに、リベースの実行後、string-library は実際にはマスター ブランチにマージされて戻っていないため、マージを完了するにはマスターに切り替えてマージを実行する必要があります。

git-rebase と git-merge は何をしますか?違いは何ですか?

リベースは再生中のコミット競合の処理に使用されているため、マージは直接早送りマージに移行し、別のコミット レコードは存在しません。マージ。

git-rebase を使用してマージする利点と欠点

利点

  • マージ中に冗長なコミットは生成されません。

  • 競合は、再生中にコミット単位で処理できます。

  • マージの際、ブランチのコミットに合わせて配置されるため、レビュー課題や機能の処理プロセスが明確に理解できます。マージを使用すると、マージ後に 2 つのブランチのコミットが時系列に並べられます。

  • オープンソース プロジェクトに貢献する場合、プッシュする前にリベースすると、作成者は競合を個別に解決することなく、早送り方式で直接マージできます。

欠点

最大の欠点は上記の欠点です。リベースを使用するとコミットの履歴が変更されます。コミットやブランチをローカルで整理する場合は問題ありません。誤ってリモート ブランチを変更し、誤って git Push -f を使用した場合、同僚から嫌われるか、純粋に北方のエンジニアに提出される可能性があります。

git-rebase または git-merge を使用する必要がありますか?

いくつかの情報を確認したところ、リベースとマージの両方に独自の支持者がいることがわかりました。最初に彼らの考えを説明し、次に主観的に私自身の意見を述べます。

git-merge Pai

サポートgit-merge Pai のエンジニアは、バージョン レコードの価値はプロジェクトのコミットにあると信じています。つまり、"このプロジェクトの歴史の中で実際に何が起こったのか。これらの歴史的記録を変更すると、非常に悪いことになります。したがって、マージ後にさまざまなブランチの内容が混在しても、プロジェクトの歴史を示しています。

git-rebase 送信

supportgit-rebase 送信されたエンジニアは、コミットがプロジェクトの「進化プロセス」について話していると感じました。何が起こったのかが重要です。コミット履歴を変更しても、何が起こったのかは変わりません。より明確で簡潔な記録を使用して、将来の世代が読むことができるため、そうする必要があります。

個人的な主観的な意見

私は個人的に、履歴レコードをよりシンプルで読みやすくするためにコミットを変更するために今でも git-rebase を使用していますが、用途はプッシュに限定されています。リモート 以前は、今日レコードをリモートにプッシュしていたら、どんなに汚くても変更しませんでした。結局、リモートのレコードは全員で共有されていました。私が勝手に変更しなければ、他のメンバーを尊重するでしょう。チームの。

[関連ビデオチュートリアルの推奨事項: Web フロントエンド ]

以上がgit-rebase と git-merge は何をしますか?違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は掘金社区で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
github是什么github是什么Mar 24, 2023 pm 05:46 PM

​GitHub是一个面向开源及私有软件项目的托管平台,可以让开发者们在这里托管自己的代码,并进行版本控制。GitHub主打的是开源项目与协作,通过这个平台上的开源项目,开发者们可以查看其他开发者的项目源代码,并进行交流和学习。

git中push -u是什么意思git中push -u是什么意思Jul 01, 2022 am 10:36 AM

在git中,“push -u”的意思是将本地的分支版本上传到远程合并,并且记录push到远程分支的默认值;当添加“-u”参数时,表示下次继续push的这个远端分支的时候推送命令就可以简写成“git push”。

如何在GitLab上进行第一次登录并更改密码如何在GitLab上进行第一次登录并更改密码Mar 24, 2023 pm 05:46 PM

GitLab是一种基于Web的Git版本控制库管理软件,旨在帮助开发团队更好地协同工作,提高工作效率。当您第一次登录GitLab时,系统会提示您要更改初始密码以确保账户安全。本文将为大家介绍如何在GitLab上进行第一次登录并更改密码。

git的pack文件有什么用git的pack文件有什么用Jun 30, 2022 pm 05:41 PM

在git中,pack文件可以有效的使用磁盘缓存,并且为常用命令读取最近引用的对象提供访问模式;git会将多个指定的对象打包成一个成为包文件(packfile)的二进制文件,用于节省空间和提高效率。

git中pull失败了怎么办git中pull失败了怎么办Jun 30, 2022 pm 04:47 PM

git中pull失败的解决方法:1、利用“git reset --hard”强制覆盖掉自己的本地修改;2、利用“git stash”推送一个新的储藏,拉取之后利用“git stash pop”将修改保存到暂存区;3、若依然出现问题,则将文件保存到暂存区并提交注释即可。

git分支能改名字吗git分支能改名字吗Jun 16, 2022 pm 05:55 PM

git分支能改名字。改名方法:1、利用git中的branch命令修改本地分支的名称,语法为“git branch -m 旧名字 新名字”;2、利用“git push origin 新名字”命令,在删除远程分支之后将改名后的本地分支推送到远程;3、利用IDEA直接操作修改分支名称即可。

git怎么删除某个分支git怎么删除某个分支Jun 24, 2022 am 11:11 AM

git删除某个分支的方法:1、利用“git branch --delete dev”命令删除本地分支;2、利用“git push origin --delete branch”命令删除远程分支;3、利用“git branch --delete --remotes”命令删除追踪分支。

用三行代码使你的git提交记录变干净用三行代码使你的git提交记录变干净Feb 28, 2023 pm 04:19 PM

本篇文章给大家带来了关于git的相关知识,其中主要跟大家聊一聊怎么让你的git记录保持整洁,感兴趣的朋友下面一起来看一下吧,希望对大家有帮助。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター