拉动不同的分支时,请"git pull"询问确认

Sil*_*ind 7 linux git

当同时与许多项目和分支机构合作时,我偶尔也会犯愚蠢的错误,比如进入错误的分支.例如,master我在分支机构上做了,git pull origin dangerous_code并且在相当长的一段时间内没有注意到.这个小错误引起了很多混乱.

当我尝试拉出当前已检出的分支以外的分支时,有没有办法让git请求确认?基本上我想要它确认分支名称是否匹配(签出和被拉出的名称).

jub*_*0bs 5

现在,我将专注于如何在执行任何拉取操作之前提示用户进行确认。

不幸的是,因为没有 pre-pull hook 之类的东西,我认为您无法获得pull直接为您执行此操作的实际命令。在我看来,您有两个选择:

1 - 使用fetchthen merge(而不是pull

而不是运行git pull,运行git fetch,然后git mergegit rebase; 分解pull为它自然包含的两个步骤将迫使您仔细检查您将要合并/变基的内容。

2 - 定义一个在拉取前要求确认的别名

定义并使用pull包装器(作为 Git 别名),如果您尝试从名称与当前本地分支不同的远程分支拉取数据,该包装器会提示您进行确认。

将以下行写入名为git-cpull.sh确认,然后拉入)的脚本文件~/bin/

#!/bin/sh

# git-cpull.sh

if [ "$2" != "$(git symbolic-ref --short HEAD)" ]
then
    while true; do
        read -p "Are you sure about this pull?" yn
        case "$yn" in
            [Yy]*)
                git pull $@;
                break
                ;;
            [Nn]*)
                exit
                ;;
            *)
                printf %s\\n "Please answer yes or no."
        esac
    done
else
    git pull $@
fi
Run Code Online (Sandbox Code Playgroud)

然后定义别名:

git config --global alias.cpull '!sh git-cpull.sh'
Run Code Online (Sandbox Code Playgroud)

之后,例如,如果您运行

git cpull origin master
Run Code Online (Sandbox Code Playgroud)

但当前分支不是 master,在pull实际执行任何操作之前,您会被要求确认。

例子

$ git branch
* master
$ git cpull origin foobar
Are you sure about this pull?n
$ git cpull origin master
From https://github.com/git/git
 * branch            master     -> FETCH_HEAD
Already up-to-date.
Run Code Online (Sandbox Code Playgroud)