Git别名:如何将add、commit、pull、push链接起来?

4
我感兴趣的是创建一个别名,它会添加所有文件,提交一条消息,拉取代码,如果出现任何冲突,请停止并显示有冲突的文件列表,否则就推送。
我已经找到了一个列出有冲突文件的别名 (git config --global alias.conflicts "diff --name-only --diff-filter=U"),但是我不知道如何集成其他命令。
在这种格式中创建一个 if 语句是否可行?
伪代码(为了易读性而分多行):
git config --global alias.commitall '!func(){ git add -A && git commit -am "$1" &&
             git pull && <conflict detection and possible die of command> &&
             git push; }; func'

这是一个糟糕的想法。不要让添加错误内容变得更加容易并自动推送它,而是使用 git add -p - user229044
虽然我知道使用-p的好处(不得不在手册中查找-http://goo.gl/BiRXFB-看它是什么),但我还是要坚持使用`-a`,因为如果我添加或删除了文件/目录,那么我也希望跟踪这些更改。此外,我也不想接受每个文件更改,因为如果提交大量更改,这可能需要很长时间。但这只是我的意见。 - Richard Parnaby-King
我通常只是为这种事情创建shell函数或别名。 - bundacia
@bundacia 这就是我正在尝试的。你有什么别名吗? - Richard Parnaby-King
@RichardParnaby-King,您所描述的情况正是您需要使用add -p的时候,也是您不应该使用add -a的时候。迟早有一天(根据您的描述,可能很快),您会提交一些意外的内容。 - user229044
2个回答

8

不需要在别名中添加冲突检查。如果在git pull时检测到冲突,它会自动echo出有冲突的文件并停止操作。这使得别名可以简化为以下内容(为了易读性而多行):

git config --global alias.commitall '!func(){ git add . && git commit -aqm "$1" &&
    git pull -q --no-progress && git push -q; }; func'

我已经添加了-q参数,以停止调用回显正常的bumpf,但这只是个人偏好。

用法:

git commitall "message goes here"

2
我认为if语句应该是这个样子的。
if [[ -n $(git diff --name-only --diff-filter=U) ]]; then
    git diff --name-only --diff-filter=U                 
else                                                     
    git push                                             
fi         

This answer helped


那个if块确实有用。将其集成到上面的别名命令中,我得到了git config --global alias.commitall '!func(){ git add -p && git commit -am "$1" && git pull && if [[ -n $(git diff --name-only --diff-filter=U) ]]; then git diff --name-only --diff-filter=U else git push fi; }; func',当我运行它时,会给我:syntax error near unexpected token '}'。你有什么想法如何解决这个问题? - Richard Parnaby-King
语法错误是由if then else fi在同一行引起的。谢谢 :) - Richard Parnaby-King
是的,在 else 后面需要加上分号。 - bundacia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接