簡體   English   中英

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

[英]Git: Shortcut for a merge workflow that includes an interactive rebase

當我想將功能分支中的更改引入主分支時,我經常執行以下操作:

$ git checkout feature-branch
$ git rebase -i master # Clean up the history
$ git checkout master
$ git reset --hard feature-branch

此命令序列是否有快捷方式?

編輯: Tim Biegeleisen指出,與其運行git reset --hard feature-branch ,不如簡單地git merge feature-branch 我想擁有的是git rebase-merge feature-branch類的快捷方式,該快捷方式導致了與我的命令序列相同的master分支。

我不知道交互式rebase內部發生了什么,但是我會提到這是一個更典型的rebase工作流程:

git checkout feature-branch
git rebase master
git checkout master
git merge feature-branch

基本思想是,我們通過引入master的最新提交來重寫功能分支,然后重新應用來自功能分支的唯一提交。 然后,我們可以使用來自功能分支的那些新提交來快速轉發master分支。

請注意,這並不比您當前擁有的短,但是我相信這是用於重新定基的更典型的工作流程。 根據您在交互式基准庫中所做的工作,我建議的上述工作流程可能不再起作用。

只需為自己編寫一個小的腳本或別名即可進行變基,如果成功(且僅當成功!),它會對master進行快進操作(假設這是您想要的結果)。

請記住,任何重新設置都可能出錯,這可能是由於用戶中止操作,也可能是由於其中一種櫻桃選擇步驟導致合並失敗。 幸運的是, 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"
}

可以將其混淆成一個單行表達式,該表達式作為Git別名出現在全局.gitconfig中。 我將其作為練習留給讀者。

還有其他一些更高級的方法可以做到這一點,但這實際上就是您正在做的事情(但簡化為使用git mege --ff-only來確保Git git mege --ff-only進行快速合並,否則將失敗。 ),只是變成了命令。 我添加了檢查以確保“ $#”(參數數)正好為1,使用我喜歡的結構,因為如果您決定要使用目標分支(當前硬編碼為master ,則可以提供兩個參數)兩次)為可選:只需將設置從“ case ...”更改為:

case $# in
1) target=master;;
2) target="$2";;
*) echo "usage ..." ...
esac

然后使用"$target"代替文字master

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM