gpt4 book ai didi

git:更新当前分支

转载 作者:太空狗 更新时间:2023-10-29 14:26:47 24 4
gpt4 key购买 nike

有 2 个 git 仓库,A 和 B

两者都只有一个 master 分支,并且都在本地 checkout 并正在处理。

我从 A 推送到 B 的主分支,我收到这条消息:

warning: updating the current branch
warning: Updating the currently checked out branch may cause confusion,
warning: as the index and work tree do not reflect changes that are in HEAD.
warning: As a result, you may see the changes you just pushed into it
warning: reverted when you run 'git diff' over there, and you may want
warning: to run 'git reset --hard' before starting to work to recover.
warning:
warning: You can set 'receive.denyCurrentBranch' configuration variable to
warning: 'refuse' in the remote repository to forbid pushing into its
warning: current branch.
warning: To allow pushing into the current branch, you can set it to 'ignore';
warning: but this is not recommended unless you arranged to update its work
warning: tree to match what you pushed in some other way.
warning:
warning: To squelch this message, you can set it to 'warn'.
warning:
warning: Note that the default will change in a future version of git
warning: to refuse updating the current branch unless you have the
warning: configuration variable set to either 'ignore' or 'warn'.

如果我在 B checkout 的主分支上工作,我该如何更新它,以便看到 A 的更改?

如果 B 上 master 的本地 checkout 中也有未提交的更改怎么办?

注意:我不是很理解上面git的信息。 “引起混淆”是否意味着它不好并且会导致数据丢失?或者它只是意味着这是一个不容易处理的情况,但我可以像往常一样相信我的所有更改都以某种方式保留并且我将能够在必要时解决冲突。 “看到还原的更改”代表什么?它是否意味着一些更改丢失了?

对于作为外国人的我来说,这门语言不是很清楚。

编辑:我刚刚在 A 上添加了一个文件并将其推送到 B。在 B 上我收到文件已删除的状态。

处理这种情况的简单工作流程是什么?

最佳答案

可能造成的困惑是这样的:假设您在 A 的 master 上的提交中添加了很多文件,并将其推送到 B 的 master。然后,如果你切换到存储库 B 的工作树并运行 git status,它会说你刚刚添加的所有文件都已删除。当然,它们并没有被删除——您只是更新了当前分支和工作树,而索引还没有被触及。我认为这让很多人感到困惑! (这也是该消息的“查看已还原的更改”的含义 - 从 git status 看起来好像您已经还原了刚刚推送的提交,只是因为工作树和索引现在位于分支后面。)

在这种情况下,如果您确定在 push master 分支之前 B 中的 git status 是干净的,您可以重置工作树和索引将分支的新位置与 git reset --hard 相匹配。

但是,如果您在 B 中有未提交或未暂存的更改,这会突然变得加倍困惑,因为很难从推送产生的“更改”中分辨出这些真正的更改 - 分离这些可能非常困难。

因此,如果您了解正在发生的事情,并且乐于处理这种情况,那就没关系。就个人而言,我几乎总是试图通过以下方式之一避免它:

  • 改为从 A pull 到 B
  • 从 A 推送到裸仓库,然后从 B pull
  • 从 A 直接推送到 B 中的另一个引用,如 explained in this git FAQ entry ,以及从那个 ref merge

我猜前两个中的一个就是您想要的。

关于git:更新当前分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5393852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com