ChatGPT解决这个技术问题 Extra ChatGPT

在 Git 中获取从 master 到分支的更改

在我的存储库中,我正在处理一个名为 aq 的分支。

然后我在 master 中提交了新的工作和错误。

将这些提交放入 aq 分支的最佳方法是什么?从 master 创建另一个新分支并将其与 aq 合并?

将来,您还可以从 master 和其他需要修复的分支的共同祖先开始您的 bugfix 分支,这样您就可以将它合并到所有这些分支中,而无需选择其他任何东西。
@Jefromi 但如果他不是从事该项目的唯一人员,那将超出他的控制范围。其他人更新大师。见鬼,你自己可能会从第三个分支更新master,这种情况是不可避免的,需要一个通用的解决方案。
@ahnbizcad 我很确定他可以控制他在哪里开设自己的分支机构。如果他的分支是他想要合并的分支的共同祖先,并且人们随后添加到这些分支,它仍然是共同祖先。
伙计们的问题,这个命令能做到吗,git pull origin my_branch_name

P
Peter Mortensen

检查 aq 分支,并从 master 变基。

git checkout aq
git rebase master

变基可以来自任何其他分支吗? IE。 git rebase 其他分支?我的问题似乎有点偏离,我从一个分支分支然后对原始分支进行了更改。
如果我是对的,请根据拉取请求重新设置基础,它将显示所有主提交。如果你使用 merge/origin master 所有主提交将显示为 1 次提交,这使得代码审查更容易。
有时,git merge 会更好。如果两个分支都随着时间的推移而发展,您应该考虑哪个最适合您。
聚会迟到了,但这是对何时变基与合并的一个很好的概述:atlassian.com/git/tutorials/merging-vs-rebasing/…
如果你之前在分支 aq 上的提交是公开的,那么不要做 rebase。 atlassian.com/git/tutorials/rewriting-history/git-rebase
C
Chris Kooken

当您在您的 aq 分支上时,您应该能够git merge origin/master

git checkout aq
git merge origin/master

rebase 是否“更好”完全取决于具体情况。
为什么不直接调用“git merge master”而不是“git merge origin/master”?
如果您的分支是本地分支并且尚未推送到 origin,请使用 rebase。如果您的分支已被推送,请使用 mergerebase 将重写历史记录。
@Toskan 您可能会遇到本地主机与遥控器不最新的问题。这样可以确保您合并到代码的远程副本中。
@garbagecollector 我反对变基(我可以,但不会变基)我认为没有理由用变基赌博。它只会让事情变得不必要地复杂。你总是有这样的问题“我把它推到远程了吗?”思考和向新人解释是痛苦的。有人说它避免了合并提交。但我想要合并提交。它们并不杂乱,它们记录分支何时合并。所以最后一次,我们可以最终停止表现得像我们都致力于掌握吗?如果你非常不喜欢日志中的合并提交,只需使用 --no-merges 过滤它们。
P
Peter Mortensen

先签出大师:

git checkout master

执行所有更改、修补程序和提交并推送您的主控。

回到你的分支“aq”,并在其中合并 master:

git checkout aq
git merge master

您的分支将与 master 保持同步。 3.2 Git Branching - Basic Branching and Merging 是一个很好的基本合并示例。


C
Cameron Clough

无法保证主错误修复不在其他提交中,因此您不能简单地合并。做

git checkout aq
git cherry-pick commit1
git cherry-pick commit2
git cherry-pick commit3
...

假设这些提交代表错误修复。

不过,从现在开始,将错误修复保留在单独的分支中。你将能够

git merge hotfixes

当您想将它们全部滚动到常规开发分支中时。


h
hestellezg

这(from here)对我有用:

git checkout aq
git pull origin master
...
git push

报价:

git pull origin master 获取 master 分支的内容并将其与您的分支合并,并创建一个合并提交。如果有任何合并冲突,您将在此阶段收到通知,并且您必须在继续之前解决合并提交。当您准备好将本地提交(包括新的合并提交)推送到远程服务器时,运行 git push。


重要的是要注意,如果特别需要合并,即如果主分支由于某种原因无法重新设置基础,则此解决方案是完美的。
a
alditis

将其与 aq 合并

git checkout master
git pull
git checkout aq
git merge --no-ff master
git push

为什么没有快进?
A
Alan Haggai Alavi

cherry-pick 相关提交到分支 aq 或将分支 master 合并到分支 aq


@Slee 你自己回答了......这不是这种情况的解决方案
s
shreyansh pandey

设想 :

我从 master say branch-1 创建了一个分支并将其拉到我的本地。

我的朋友从 master 说 branch-2 创建了一个分支。

他向大师提交了一些代码更改。

现在我想将这些更改从主分支转移到我的本地分支。

解决方案

git stash // to save all existing changes in local branch
git checkout master // Switch to master branch from branch-1
git pull // take changes from the master
git checkout branch-1 // switchback to your own branch
git rebase master // merge all the changes and move you git head  forward
git stash apply // reapply all you saved changes 

执行“git stash apply”后,您可以在文件中找到冲突。您需要手动修复它,现在您可以推送了。


值得注意的是,如果其他人的分支从您的分支(或以其他方式链接到您现有历史的更改),那么变基将是一场噩梦。如果你的分支是纯本地的,这很好,但要小心重写已经发布的历史!
P
Pete B.

对我来说,我已经进行了更改,我想要来自基础分支的最新版本。我无法执行 rebase,并且 cherry-pick 将永远花费,因此我执行了以下操作:

git fetch origin <base branch name>  
git merge FETCH_HEAD

所以在这种情况下:

git fetch origin master  
git merge FETCH_HEAD

A
Alen Lee

简单的方法

# 1. Create a new remote branch A base on last master
# 2. Checkout A
# 3. Merge aq to A

M
MikeBeaton

编辑:

我在下面的回答记录了一种将 master 合并到 aq 的方法,如果您查看合并的详细信息,它会列出合并之前在 aq 上所做的更改,而不是在 master 上所做的更改。我意识到这可能不是你想要的,即使你认为它是!

只是:

git checkout aq
git merge master

很好。

是的,这个简单的合并将显示从 masteraq 的更改是在那个时候进行的,而不是相反;但这没关系——因为那确实发生了!稍后,当您最终将分支合并到 master 时,合并最终将显示您对 master 所做的所有更改(这正是您想要的,也是人们期望的提交无论如何都要找到该信息)。

我已经检查过,下面的方法也显示了与上述正常方法完全相同的更改(自 originalaqmaster 之间拆分以来对 aq 所做的所有更改),当您最终将所有内容合并回 master。所以我认为它唯一真正的缺点(除了过于复杂和非标准...... :-/ )是如果你用 git reset --hard HEAD~<n> 回退 n 最近的更改并且这超过了合并,那么下面的版本就会滚动退回“错误”的分支,您必须手动修复(例如使用 git reflog & git reset --hard [sha])。

[所以,我之前的想法是:]

有一个问题:

git checkout aq
git merge master

因为合并提交中显示的更改(例如,如果您现在或稍后在 Github、Bitbucket 或您最喜欢的本地 git 历史查看器中查看)是在 master 上所做的更改,这很可能不是您想要的。

另一方面

git checkout master
git merge aq

显示在 aq 中所做的更改,这可能是您想要的。 (或者,至少,这通常是我想要的!)但是显示正确更改的合并在错误的分支上!

怎么应对?!

整个过程以合并提交结束,显示在 aq 上所做的更改(根据上面的第二次合并),但合并影响 aq 分支,是:

git checkout master
git merge aq
git checkout aq
git merge master
git checkout master
git reset --hard HEAD~1
git checkout aq

这:将 aq 合并到 master 上,将相同的合并快进到 aq 上,在 master 上撤消它,然后让您再次回到 aq 上!

我觉得我错过了一些东西——这似乎是你显然想要的东西,而且很难做到。

此外,rebase 不等同。它丢失了在 aq 上提交的时间戳和身份,这也不是我想要的。


如果您还没有准备好将 aq 合并到 master 中,这不是一个解决方案。如果其他人参与您的项目,则非常重要的发言人。它似乎也违背了单独分支的目的。
(发言人?自动更正错字?)无论如何,这个解决方案是关于将 master 中的一些更改合并到 aq 中,根据原始问题,所以我不确定我是否理解你建议的问题?当然,在完成我提到的上述任一解决方案之后,您最终可以将 aq 合并到 master,然后对两者进行进一步的更改 - 这不会导致任何问题。
D
Dan McNamara

你有几个选择。 git rebase master aq到将保留提交名称的分支上,但如果这是一个远程分支,则不要 REBASE。如果您不关心保留提交名称,您可以git merge master aq。如果您想保留提交名称并且它是远程分支 git cherry-pick <commit hash>,则提交到您的分支。


p
prafi

您也可以通过运行一行来执行此操作。
git merge aq master

这相当于

git checkout aq
git merge master

这不是在做你认为它在做的事情。 git merge a b 将分支 ab 合并到当前分支。但是,当您在分支 a 上时,git merge a 将什么也不做(这就是为什么它看起来有点像您认为它正在做的事情)。 (见git-scm.com/docs/git-merge#Documentation/…。)