#git-rebase #git-branch #git-workflow #interactive #instructions #update

nightly app restack

教授您如何使用交互式 git rebase --interactive 来处理您的分支

4 个版本 (2 个破坏性更新)

0.8.0 2024年8月2日
0.7.0 2023年7月5日
0.6.1 2022年11月7日
0.6.0 2022年9月25日

#4 in #git-branch

Download history 1/week @ 2024-07-22 92/week @ 2024-07-29 17/week @ 2024-08-05

每月110次下载

GPL-2.0 许可证

125KB
1.5K SLoC

📚 restack CI Crate codecov

restack 丰富了交互式 Git rebase 的体验,使其更适合涉及众多相互依赖分支的工作流程。

有关此工具为何存在及其促进的工作流程的更多背景信息,请参阅 自动重排 Git 分支

安装

使用以下任一选项安装 restack。

  • 如果您在 macOS 或 Linux 上使用 Homebrew,请运行以下命令以下载并安装预构建的二进制文件。

    brew install abhinav/tap/restack
    
  • 如果您使用 ArchLinux,请使用 AUR 中的 restack-bin 软件包安装预构建的二进制文件或使用 restack 软件包从源代码构建。

    git clone https://aur.archlinux.org/restack-bin.git
    cd restack-bin
    makepkg -si
    

    使用 AUR 辅助工具(如 yay),请运行以下命令代替

    yay -S restack-bin # pre-built binary
    yay -S restack     # build from source
    
  • GitHub 发布页面 下载预构建的二进制文件并将其放置在您的 $PATH 中。

  • 如果您已安装 Rust,则可以从源代码构建。

    cargo install restack
    

设置

restack 通过将自己安装为 Git sequence.editor 来工作。您可以手动设置此选项,也可以让 restack 自动设置。

自动设置

运行 restack setup 以配置 git 以使用 restack

restack setup

手动设置

如果您不希望 restack 修改您的 .gitconfig,则可以通过运行以下命令手动设置:

git config sequence.editor "restack edit"

请查看 restack edit --help 了解 restack edit 接受的不同选项。

用法

restack 会自动识别被 rebase 操作影响的分支,并添加 rebase 指令以更新这些分支,当它们的头部分支移动时。

生成的指令列表还包括一个可选的注释部分,该部分会将这些分支推送到远程。

例如,给定:

o master
 \
  o A
  |
  o B (feature1)
   \
    o C
    |
    o D (feature2)
     \
      o E
      |
      o F
      |
      o G (feature3)
       \
        o H (feature4, HEAD)

从分支 feature4 运行 git rebase -i master 将给出以下指令列表。

pick A
pick B
exec git branch -f feature1

pick C
pick D
exec git branch -f feature2

pick E
pick F
pick G
exec git branch -f feature3

pick H

# Uncomment this section to push the changes.
# exec git push -f origin feature1
# exec git push -f origin feature2
# exec git push -f origin feature3

所以,在每次 exec git branch -f 之前所做的任何更改将成为该分支的一部分,而后续的所有更改都将基于该分支进行。

致谢

感谢 @kriskowal 初始时将该工具作为脚本实现。

常见问题解答

我可以将 restacking 设置为可选吗?

如果您不希望 restack 在每次 git rebase 时都执行操作,您可以通过引入一个新的 Git 命令将其设置为可选。

为此,首先确保您没有为常规的 git rebase 设置 restack。

git config --global --unset sequence.editor

接下来,创建一个名为 git-restack 的文件,并包含以下内容。

#!/bin/bash
exec git -c sequence.editor="restack edit" rebase -i "$@"

将其标记为可执行,并将其放置在 $PATH 的某个位置。

chmod +x git-restack
mv git-restack ~/bin/git-restack

从现在开始,您可以通过运行 git rebase 进行常规 rebase,并通过运行 git restack 来运行支持分支 restacking 的 rebase。

依赖项

~2–10MB
~116K SLoC