gpt4 book ai didi

git - merge 而不改变工作目录

转载 作者:IT王子 更新时间:2023-10-29 01:29:20 32 4
gpt4 key购买 nike

我有以下场景:

* ab82147 (HEAD, topic) changes
* 8993636 changes
* 82f4426 changes
* 18be5a3 (master) first

我想将(非快进)topic merge 到 master 中。这需要我:

  • git checkout master
  • git merge --no-ff topic

但是 checkout master,然后将主题 merge 到其中会导致 git 更改我的工作目录(尽管最终结果与 checkout master 之前的结果相同),我遇到的问题是由于我们的项目,构建它大约需要 30 分钟(使用 IncrediBuild),尽管没有任何真正的改变,而且简直无法忍受。

所以我想得到的是:

*   9075cf4 (HEAD, master) Merge branch 'topic'
|\
| * ab82147 (topic) changes
| * 8993636 changes
| * 82f4426 changes
|/
* 18be5a3 first

没有真正触及工作目录(或者至少以某种方式欺骗 git)。

最佳答案

有趣!我不认为有内置的方法可以做到这一点,但你应该能够使用管道来捏造它:

#!/bin/bash

branch=master
# or take an argument:
# if [ $@ eq 1 ];
# branch="$1";
# fi

# make sure the branch exists
if ! git rev-parse --verify --quiet --heads "$branch" > /dev/null; then
echo "error: branch $branch does not exist"
exit 1
fi

# make sure this could be a fast-forward
if [ "$(git merge-base HEAD $branch)" == "$(git rev-parse $branch)" ]; then
# find the branch name associated with HEAD
currentbranch=$(git symbolic-ref HEAD | sed 's@.*/@@')
# make the commit
newcommit=$(echo "Merge branch '$currentbranch'" | git commit-tree $(git log -n 1 --pretty=%T HEAD) -p $branch -p HEAD)
# move the branch to point to the new commit
git update-ref -m "merge $currentbranch: Merge made by simulated no-ff" "refs/heads/$branch" $newcommit
else
echo "error: merging $currentbranch into $branch would not be a fast-forward"
exit 1
fi

有趣的一点是 newcommit= 行;它使用提交树直接创建 merge 提交。第一个参数是要使用的树;那是树的 HEAD,即您要保留其内容的分支。提交消息在 stdin 上提供,其余参数命名新提交应具有的父项。提交的 SHA1 被打印到标准输出,因此假设提交成功,您捕获它,然后 merge 该提交(这将是一个快进)。如果您执迷不悟,您可以确保提交树成功 - 但这应该得到很大保证。

限制:

  • 这只适用于可能快进的 merge 。显然,在这种情况下,您实际上必须 check out 并 merge (可能在克隆中,以保存您的构建系统)。
  • reflog 消息不同。我是故意这样做的,因为当你使用 --no-ff 时,git 实际上会强制自己使用默认(递归)策略,但将其写在 reflog 中是一个谎言。<
  • 如果你处于独立的 HEAD 模式,事情就会变得很糟糕。那将不得不被特殊对待。

是的,我在一个玩具仓库中对此进行了测试,它似乎可以正常工作! (虽然我没有努力打破它。)

关于git - merge 而不改变工作目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3408532/

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