2017-08-07 124 views
1

我有一個done.sh腳本,只要我在分支上完成工作(在將分支發佈到遠程repo並將其合併到dev後),就可以調用該腳本。獲取用於腳本的當前分支的名稱

目前,它僅包含如下: git checkout master && git pull

我想也包括當前分支的刪除。

我知道結帳的速記存在, git checkout -可以讓你去你的上一個分支,所以我想要的是類似git branch -D -的東西,但這並不存在。

研究#2顯示了我如何獲得當前分支的名稱: git rev-parse --abbrev-ref HEAD但腳本我有辦法,我只能用這個checkout後,並沒有直接。

回答

1

鑑於您已經包含了該井, -answer,我不確定您的實際問題是什麼。也許這是關於在腳本中使用變量?

get_current_branch() { 
    git rev-parse --abbrev-ref HEAD 
} 

cbranch=$(get_current_branch) 
git checkout master && git pull 
do_something_with $cbranch 

我把get_current_branch成殼功能這裏,因爲這個人是有缺陷的:如果你有一個「分離的頭」開始時,你會得到這樣的:

$ git checkout --detach master 
HEAD is now at 4384e3cde... Git 2.14 
Your branch is up-to-date with 'origin/master'. 
$ git rev-parse --abbrev-ref HEAD 
HEAD 

使$cbranch捲起只是HEAD

另一種方法是使用git symbolic-ref,產生stderr中的fatal: ...錯誤信息,並沒有分支機構的名稱,當你在這個分離的頭模式:

$ git symbolic-ref --short HEAD 
fatal: ref HEAD is not a symbolic ref 

一旦回到master,雖然:

$ git checkout master 
Switched to branch 'master' 
Your branch is up-to-date with 'origin/master'. 
$ git symbolic-ref --short HEAD 
master 

,所以我們可以使用git symbolic-ref更換外殼的功能,如果外殼應在分離的頭模式下打印錯誤:

cbranch=$(git symbolic-ref --short HEAD) || exit 

|| exit使得外殼出口(與最後一個命令運行的退出狀態,在這種情況下,git symbolic-ref狀態);如果命令失敗,因此這將要麼把目前的分行名稱爲$cbranch,要不然打印一條消息到stderr並退出。


與所有的出路,我也建議避免git pull完全,和檢查索引和/或工作樹是否乾淨。請參閱$(git --exec-path)/git-sh-setup瞭解一些用於Git腳本的shell腳本項目。例如,shell函數require_clean_work_tree在這裏很有用。


而不是運行git pull,你幾乎總是要運行git fetch,然後仔細檢查的獲取結果。只需將結果合併到合併或重新分配操作中,如git pull所做的那樣,在腳本中很難做到。

+0

是的,存儲在變量中正是我想要的。我只是不知道這是我想要的。感謝您的解釋和其他附加信息。我只是開始爲我的工作流程使用腳本,所以這非常有用。 – nxmohamad