Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git:包含交互式重基的合并工作流的快捷方式_Git - Fatal编程技术网

Git:包含交互式重基的合并工作流的快捷方式

Git:包含交互式重基的合并工作流的快捷方式,git,Git,当我想将功能分支的更改引入主分支时,我通常会执行以下操作: $ git checkout feature-branch $ git rebase -i master # Clean up the history $ git checkout master $ git reset --hard feature-branch 这个命令序列有快捷方式吗 EDIT:Tim Biegeleisen指出,与其运行git reset--hard feature branch,我可以简单地git merge

当我想将功能分支的更改引入主分支时,我通常会执行以下操作:

$ git checkout feature-branch
$ git rebase -i master # Clean up the history
$ git checkout master
$ git reset --hard feature-branch
这个命令序列有快捷方式吗


EDIT:Tim Biegeleisen指出,与其运行
git reset--hard feature branch
,我可以简单地
git merge feature branch
。不过,我想要的是一个快捷方式,如
git-rebase-merge-feature-branch
,它会产生与我的命令序列相同的主分支。

我不知道交互式rebase中发生了什么,但我要提到的是,这是一个更典型的rebase工作流:

git checkout feature-branch
git rebase master
git checkout master
git merge feature-branch
其基本思想是,我们通过引入来自master的最新提交,然后重新应用来自feature分支的唯一提交来重写feature分支。然后,我们可以使用来自功能分支的新提交快速前进主分支


请注意,这并不比您当前拥有的短,但我相信这是与重定基址一起使用的更典型的工作流。根据您在交互式基础中所做的工作,我建议的上述工作流可能不再有效。

我不知道交互式基础中发生了什么,但我要提到的是,这是一个更典型的基础工作流:

git checkout feature-branch
git rebase master
git checkout master
git merge feature-branch
其基本思想是,我们通过引入来自master的最新提交,然后重新应用来自feature分支的唯一提交来重写feature分支。然后,我们可以使用来自功能分支的新提交快速前进主分支


请注意,这并不比您当前拥有的短,但我相信这是与重定基址一起使用的更典型的工作流。取决于您在交互式重基中所做的工作,我建议的上述工作流可能不再有效。

只需为自己编写一个执行重基的小脚本或别名,如果(并且仅当!)成功,则在
主机上执行快进操作(假设这是您想要的结果)

请记住,任何重基都可能出错,可能是由于用户中止,也可能是由于在其中一个cherry pick步骤中的合并失败。幸运的是,
git-rebase
本身是一个性能良好的Unix/Linux/POSIX工具:它在成功时为零,在失败时为非零,因此您可以判断它是成功还是失败。其他Git命令也类似。因此,这可以作为小型bash/sh shell函数实现:

rebase-merge() {
    case $# in
    1) ;; # good
    *) echo "usage: rebase-merge <branch>" 1>&2; exit 1;;
    esac
    git checkout "$1" &&
        git rebase -i master &&
        git checkout master &&
        git merge --ff-only "$1"
}

然后使用
“$target”
而不是literal
master

只需为自己编写一个小脚本或别名来执行重基,如果(且仅当!)成功,则在
master
上执行快进操作(假设这是您想要的结果)

请记住,任何重基都可能出错,可能是由于用户中止,也可能是由于在其中一个cherry pick步骤中的合并失败。幸运的是,
git-rebase
本身是一个性能良好的Unix/Linux/POSIX工具:它在成功时为零,在失败时为非零,因此您可以判断它是成功还是失败。其他Git命令也类似。因此,这可以作为小型bash/sh shell函数实现:

rebase-merge() {
    case $# in
    1) ;; # good
    *) echo "usage: rebase-merge <branch>" 1>&2; exit 1;;
    esac
    git checkout "$1" &&
        git rebase -i master &&
        git checkout master &&
        git merge --ff-only "$1"
}

然后使用
“$target”
而不是文本
master

在交互式重新基准中发生了什么?我们需要知道这一点才能回答你的问题,我想。我经常对提交进行重新排序或挤压,或编辑提交消息。在交互的重新基址中发生了什么?我想,我们需要知道这一点才能回答您的问题。通常我会重新排序或挤压提交,或编辑提交消息。我更喜欢不进行合并提交。@sjakobi我的工作流通常不会导致合并提交。我怀疑你不懂重新定基调。我只是不知道快进合并不会导致合并提交。谢谢您知道将这一系列命令简化为单个命令的好方法吗?@sjakobi Fast forwards可能会导致合并提交,如果有人将您的repo(例如Bitbucket、GitHub)配置为始终进行合并提交。但是,我不知道如何缩短时间。我不喜欢合并提交。@sjakobi我的工作流通常不会导致合并提交。我怀疑你不懂重新定基调。我只是不知道快进合并不会导致合并提交。谢谢您知道将这一系列命令简化为单个命令的好方法吗?@sjakobi Fast forwards可能会导致合并提交,如果有人将您的repo(例如Bitbucket、GitHub)配置为始终进行合并提交。但是,我不知道有什么办法可以把它缩短。谢谢!这就是我要找的!:)一旦我弄清楚git别名,我会回来报告的。谢谢!这就是我要找的!:)一旦我弄清楚git别名,我就会回来报告。