1

如果我在分支“x”上并试图从分支“y”中拉出,如何让 git 向我发出警告?

举个例子;

考虑到我当前的本地工作分支是 x 并且我正在发布:

git pull origin y

在这一点上,我希望 git 发出类似于“您正在获取另一个分支并将其合并到当前工作分支中的警告。您要继续吗?(y/n)”

这可能吗?可能有一些配置选项?

我知道如何挽回这个错误,但是我宁愿在犯这样的错误之前得到警告。

4

2 回答 2

2

无法在拉取请求之前停止 git 处理并接受用户输入。我的意思是,这是可能的,但为此您必须对 git 进行一些更改并从源代码构建它。我不会走这条路。

在git hooks中使用条件语句有一个漂亮的小技巧。您可以在 git 挂钩中使用 Ruby(或任何其他语言)使其成为有条件的。这pre-commit在任何实际处理发生之前调用的钩子或钩子中最有效。在 a 的情况下git pull,您可以锁定的唯一钩子是post-merge钩子,并且只有在整个处理完成后才会调用它。因此,没有必要真正询问用户是否要在合并分支后合并另一个分支,对 :) 但是,您可以向他们显示一条消息。

为此,请使用以下内容:

#!/usr/bin/env ruby

branch=$(git rev-parse --symbolic --abbrev-ref $1)
if branch != $GIT_DIR/ORIG_HEAD
  puts "You merged a different branch dim wit"
end

现在,我要做的是比较合并的分支是否与原始分支名称相同,如果不是,则向用户显示一条消息。这将显示remote在您的 git 合并摘要中。

同样,我不确定这是否可行,因为我不确定是否git rev-parse --symbolic --abbrev-ref $1会给你分支名称。

这又是一个建议,而不是您问题的解决方案:(

于 2012-09-30T21:18:20.800 回答
1

如果您的当前分支已设置为跟踪上游分支(如 中git branch --set-upstream test origin/test),您只需:

 git pull origin

(避免任何错误的可能性)

注意:根据您的 git 版本,这也会对您的推送操作产生影响:请参阅“与之间git checkout --track origin/branchgit checkout -b branch origin/branch区别”。

因此,要准确回答您的问题:没有内置方法可以使用 git 获得该警告您可以对rizwaniqbal回答
中推荐的钩子脚本进行版本化(赞成),但每个用户都必须在他/她自己的仓库中声明该钩子。

于 2012-09-30T18:37:20.410 回答