【问题标题】:How can I reset another branch to the origin without checking it out?如何在不检查的情况下将另一个分支重置为原点?
【发布时间】:2021-01-06 22:57:58
【问题描述】:

我的典型工作流程是结帐master 并输入git reset --hard @{u}。 从那里我将检查我想要合并 master 的分支并合并 master

我可以在不更改的情况下执行更新master 的步骤吗? (这将帮助我在更改时不隐藏)

例如,我在从 master 分支的分支 A 上。 master 已经工作,我有很多更改,不想执行存储,所以不要执行

  1. git stash
  2. git checkout master
  3. git reset --hard @{u}
  4. git checkout A
  5. git merge master
  6. git pop stash (pseudo)

我希望能够在当前位于分支 A 上时为 master 执行 git reset --hard @{u}

【问题讨论】:

标签: git


【解决方案1】:

我可以在不更改master的情况下执行更新master的步骤吗?

是的,请参阅this answer

我认为这些答案不涉及对其执行硬重置。

当您不签出另一个分支时,硬重置没有意义。

如果您不进行合并,您也可以通过使用软重置而不是混合重置来避免 stash

因此(几乎)您的所有步骤都浓缩为单个branch 或软reset 命令,如该答案中所述。


一般来说,您的工作流程看起来很奇怪。要更新 master 以与上游同步,您通常会快进 merge 更改。但是没有必要这样做,您可以将您的工作分支建立在fetch 之后的远程分支之上。

此外,您通常会将master 合并到本地分支以保持它们同步,或者将rebase 合并到master 之上您的分支;取决于您的工作流程风格(您是否希望历史记录更加线性)。

一般来说,使用stash 应该很少见。

【讨论】:

  • 该问题的答案似乎是更新master 以匹配A,而不是重置master 以更新为上游状态,然后使用master 更新A
  • 无论您尝试将另一个分支更新到什么,都可以根据需要将其指向任意提交。当然,合并它是它自己的步骤(编辑答案澄清)。
  • 再次编辑以提供更多提示,因为您使用的工作流程听起来可以大大改进。
【解决方案2】:

试试git worktree

git worktree add /path/to/foo master
cd /path/to/foo
git reset --hard @{u}
# remove the working tree when it's not needed any more
git worktree remove /path/to/foo

它在另一个工作树中签出master,并且不影响A已签出的当前工作树。

但是,你为什么要坚持使用git reset --hardgit update-ref 确实是更好的解决方案。

【讨论】:

  • 我没有使用过git update-ref,然后才发现git fetch 变成了git reset --hard @{u} 一种可靠的说法“硬重置到上游”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-05
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
  • 2013-04-03
  • 2021-06-15
  • 1970-01-01
相关资源
最近更新 更多