2013-10-25 39 views
126

有没有办法在一个中使用这三个命令?git添加,提交和推送命令在一个?

git add . 
git commit -a -m "commit" (do not need commit message either) 
git push 

有时我只更改一个字母,CSS填充或其他东西。不过,我必须编写所有三个命令来推送更改。有很多项目,我只有一个推动者,所以这个命令会很棒!

+7

您是否试过编写shell脚本? – Paul

+13

你不需要提交消息? [否](http://i.imgur.com/a9IAGPv.jpg)。另外,'-a'的意思是'添加',所以有一个。 –

+1

http://stackoverflow.com/questions/7852148/function-in-bash-to-commit-and-push-in-one-command – CodeGroover

回答

27

我想你可能会误解git所设计的工作流程。 (要澄清/更正我在评论中的含义,您不需要git add .,因为commit -a通常用于相同的目的 - 添加尚未上演的任何更改(如果文件已添加)

通常,你会做这样的事情:

# make some changes 
$ git commit -a -m "Changed something" 
# make some more changes 
$ git commit -a -m "Changed something else" 

洗,漂洗,重复,直到你完成的功能X,或者你在一个停车点,或者你只是想其他人看到你”已经完成。那么你做

$ git push 

Git不是SVN - 但它似乎是你试图使用它。您可能会发现文章here末尾的一些资源有一定用处。

+4

+1以获得关于工作流程的解释。然而'git add .'和'git commit -a' [是不一样的东西](http://stackoverflow.com/questions/3541647/git-add-vs-git-commit-a) –

+0

如果我是删除/创建一个文件。 'git commit -a'能找到它吗?对我来说,它失败了,但也许有错误 – Gediminas

+4

感谢您的解释,但GIT不会崩溃,如果将有这样的命令为那些谁知道他们在做什么... – Gediminas

33

虽然我对他的怀疑与韦恩沃纳同意,这在技术上是一个选项:

git config alias.acp '! git commit -a -m "commit" && git push' 

它定义了运行commitpush的别名。使用它作为git acp。请注意,这样的“shell”别名总是从你的git仓库的根目录运行。

另一种选择可能是编写一个post-commit钩子来执行推送。

+0

@wlz我只是试了一下,它工作正常。请注意整个字符串在单引号内。 'git'自动添加转义(用'git config -e'检查)。 –

+0

对不起,你是对的:)。我直接编辑.gitconfig文件。 “已经逃脱了”。 – wlz

+0

这绝对很酷。 –

5

如果该文件已被跟踪,那么你并不需要运行git add,你可以简单地写git commit -am 'your message'

如果你不想写一个提交信息,你可能会考虑做一些像

git commit --allow-empty-message -am ''

14

设置为在bash别名:

$ alias lazygit="git add .; git commit -a -m '...'; git push;"; 

叫它:

$ lazygit 

(为了使这个别名永久性的,你必须把它列入你的.bashrc或.bash_profile中)

+0

它重新启动后工作吗? – Gediminas

+0

>不,不是 – Gediminas

+0

您需要将别名添加到.bashrc或.bash_profile以使其成为永久的 – Gavin

141

大厦断@加文的回答是:

制作lazygit而不是功能一个别名允许你传递一个参数。我已将以下内容添加到我的.bashrc(或。在.bash_profile如果苹果机):

function lazygit() { 
    git add . 
    git commit -a -m "$1" 
    git push 
} 

这使您可以提供一个提交信息,如

lazygit "My commit msg" 

,可以将这个建立过程的牛肉更被接受甚至更多的参数,比如哪些偏远的地方的推到,或哪个分支。

+0

不工作在我的Ubuntu服务器上,有没有东西更多我应该做一个像重新启动或什么的?我将你的函数添加到我的.bashrc脚本的末尾。 –

+1

@JoeYahchouchi不工作如何?你重置你的终端(或资源的bashrc文件)?如果你输入'which lazygit',会发生什么? – btse

+0

没关系,它的工作原理,谢谢。服务器重新启动有窍门,我想修改我的评论,但我找不到它。 –

14

您可以使用bash脚本,设置别名发出命令

git commit -am "your message" && git push 
+2

如果你想让这个答案,请添加更多关于它如何工作的评论。只是代码转储的答案通常不被广泛接受。见[回答]。 –

+1

对不起,先生,我会更新我的答案 – vuhung3990

+0

我认为这应该是正确的答案。它尽可能简洁地回答问题。只需输入到终端,它的工作原理!如果你不想添加一个别名,另一种方法是简单地创建一个textExpander展开并通过一个组合键来触发它。 – eonist

3

正如this答复中提到的任何命令或组,您可以创建一个git的别名并分配了一套它的命令。在这种情况下,这将是:

git config --global alias.add-com-push '!git add . && git commit -a -m "commit" && git push' 

git add-com-push 
+1

这不会添加任何以前的答案。 – BanksySan

+0

对不起,你是对的。我想我没有注意到Tilman Vogel的答案和我的答案是一样的。我应该删除它吗? – cristianzamar

1

使用它有一些问题与上面的脚本:

转移 “删除” 参数$ 1,否则“推“将会读取它并”误解它“。

我的尖端:

混帐配置--global alias.acpp” git的添加-A & & branchatu = “$(GIT 符号-REF HEAD 2>的/ dev /空)” & & branchatu = $ {branchatu ##参/头/} & & git的承诺-m “$ 1” & &移& & GIT中拉-u原点$ branchatu & & GIT中 推-u或igin $ branchatu”

15

我用这对我的.bash_profile

gitpush() { 
    git add . 
    git commit -m "$*" 
    git push 
} 
alias gp=gitpush 

它执行像

gp A really long commit message 

不要忘记保存别名后运行source ~/.bash_profile

+1

我真的很喜欢这个。 ...并因此将其采用到我自己的〜/ .bash_profile;)谢谢。+1 –

46

最后我加入一个别名我.gitconfig文件:

[alias] 
    cmp = "!f() { git add -A && git commit -m \"[email protected]\" && git push; }; f" 

用法:git cmp "Long commit message goes here"

添加的所有文件,然后使用该提交信息的评论,并会将它推到原点。

我认为这是一个更好的解决方案,因为您可以控制提交消息的内容。

别名可以通过命令行还规定,该把它添加到您的.gitconfig

git config --global alias.cmp '!f() { git add -A && git commit -m "[email protected]" && git push; }; f' 
+5

这应该是最好的答案! – Demonbane

+0

这是一个很好的解决方案!只要在Windows – Jako

2

我使用批处理文件:

@ECHO OFF 
SET /p comment=Comment: 
git add * 
git commit -a -m "%comment%" 
git push 
+0

上使用,如果您从命令行接受参数,probs会更容易。我只是去“lezygit MESSAGE”等它非常酷! –

1

当你想的Git SVN样行为提交,在你的git别名中使用.gitconfig

commit = "!f() { git commit \"[email protected]\" && git push; };f"

6

您可以尝试gitu

第一次(节点JS必须安装):

npm install -g git-upload 

之后:

gitu COMMIT_MSG 

要一次发出这三个命令。

好事是你不必担心当你重新安装你的系统或当你想在不同的计算机上这样做,并且不需要文件修改。 这也工作在不同的平台(不只是Linux和Mac,而且在Windows下一样cmdpowershell命令提示符)只是你必须安装npmnodejsgit当然)。

0

我这样做.SH脚本命令

#!/bin/sh 
cd LOCALDIRECTORYNAME/ 
git config --global user.email "YOURMAILADDRESS" 
git config --global user.name "YOURUSERNAME" 
git init 
git status 
git add -A && git commit -m "MASSAGEFORCOMMITS" 
git push origin master 
0

由于问题没有指定哪个壳,这里是基于早期的答案ESHELL版本。这在eshell别名文件中,可能在〜/ .emacs.d/eshell /别名中我已经添加了第一部分z https://github.com/rupa/z/,它让你快速cd到一个目录,这样无论你的目录当前目录是。

alias census z cens; git add .; git commit -m "fast"; git push 
1

如果你想更好地编辑你的提交信息,我的意思是添加多个线等等......然后

git commit -a && git push 

将打开编辑器,一旦你保存它也将推动信息它。

0

添加在~/.bash_profile添加,并提交一个命令推放:

function g() { git commit -a -m "$*"; git push; } 

用法:

g your commit message 
g your commit message 'message' 

虽然你不能使用分号或括号中不需要引号你的提交消息(允许单引号)。如果你想要其中的任何一个,只需在你的邮件中加双引号,例如:

g "your commit message; (message)" 

要在您的留言评论做到:

g "your commit message: 
> your note" 

也有以类似的方式加入并提交功能:

function c() { git add --all; git commit -m "$*"; } 

作品完全相同的方式g函数并具有相同的约束。代替c。 例如

c your commit message 

您还可以添加一个别名推到远程:

alias p='git push' 

用法:

p 

这相当于到2个字母,c并与工作时p您使用git存储库。或者,您可以使用g而不是只用一个字母来完成。

全部别名和功能的列表: https://gist.github.com/matt360/0c5765d6f0579a5aa74641bc47ae50ac

0

建设关lazygit答案,下面的解决方案增加了一个用户检前推,以验证更改。如果取消,它将恢复命令。而且只有在当地回购协议发生变化时才会发生。

### SAFER LAZY GIT 
function lazygit() { 
    git add . 
    if git commit -a -m "$1"; then 
    read -r -p "Are you sure you want to push these changes? [y/N]} " response 
    case "$response" in 
     [yY][eE][sS]|[yY]) 
     git push 
     ;; 
     *) 
     git reset HEAD~1 --soft 
     echo "Reverted changes." 
     ;; 
    esac 
    fi 
} 
相关问题