git add,commit和push命令合二为一?

Ged*_*nas 203 git

有没有办法在一个中使用这三个命令?

git add .
git commit -a -m "commit" (do not need commit message either)
git push
Run Code Online (Sandbox Code Playgroud)

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

bts*_*tse 216

建立@Gavin的答案:

使lazygit成为函数而不是别名允许你传递一个参数.我已将以下内容添加到我的.bashrc(如果是Mac,则添加.bash_profile):

function lazygit() {
    git add .
    git commit -a -m "$1"
    git push
}
Run Code Online (Sandbox Code Playgroud)

这允许您提供提交消息,例如

lazygit "My commit msg"
Run Code Online (Sandbox Code Playgroud)

你当然可以通过接受更多的参数来加强这一点,比如要推送到哪个远程位置,或者哪个分支.

  • 可以使用`$*`代替`$ 1`来保存输入引号:`lazygit My commit msg` (22认同)
  • @KaiCarver很好想,但我个人不喜欢它.它会阻止您使用多个args,并且还违反单个字符串arg的常规约定,其中空格用引号括起来.这是我的第二天性(我会假设很多开发人员).留下引号感觉很脏. (16认同)
  • 不需要重新启动,只需执行"source .bashrc" (8认同)
  • lazygit,有史以来最好的名字! (4认同)
  • @btse我是一个外交人员+周五.这是使用@KaiCarver建议的函数:`function dirtygit(){git add.git commit -a -m"$*"git push}` (4认同)
  • @OnklMaps很好,但由于stackoverflow注释不允许新行,最好用分号:`function dirtygit(){git add.; git commit -a -m"$*"; git push}` (2认同)

小智 81

我最后在我的.gitconfig文件中添加了一个别名:

[alias]
    cmp = "!f() { git add -A && git commit -m \"$@\" && git push; }; f"
Run Code Online (Sandbox Code Playgroud)

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

添加所有文件,然后使用提交消息的注释并将其推送到源.

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

别名也可以从命令行定义,这会将其添加到您的.gitconfig:

git config --global alias.cmp '!f() { git add -A && git commit -m "$@" && git push; }; f'
Run Code Online (Sandbox Code Playgroud)

  • 这正是我一直在寻找的!工作完美,谢谢!我找不到完整的语法参考或详细的命令列表.什么`!f(){...}; f`do到底?对该行的更多解释将使答案更好. (6认同)
  • @DmitriyDemir 它定义了函数“f”,然后调用它。 (4认同)
  • @Oliver 为什么用引号引起来?为什么会有感叹号?最后的 f 是否调用了函数?什么是“$@”? (2认同)

Til*_*gel 47

虽然我同意Wayne Werner的疑虑,但这在技术上是一个选择:

git config alias.acp '! git commit -a -m "commit" && git push'
Run Code Online (Sandbox Code Playgroud)

它定义了运行的别名commitpush.用它作为git acp.请注意,此类"shell"别名始终从您的git存储库的根目录运行.

另一种选择可能是编写一个推送后提交钩子.

  • 为什么这不是公认的答案?它完成了所要求的。+1。 (2认同)
  • 在 Windows 上,我需要转义 $1 周围的双引号,以使其在 PowerShell 中工作(使用 ... \"$1\" ...) (2认同)

Way*_*ner 35

我想你可能会误解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"
Run Code Online (Sandbox Code Playgroud)

洗完,冲洗,重复,直到你完成X特征,或者你处于停止点,或者你只是想让其他人看到你做了什么.然后你做

$ git push
Run Code Online (Sandbox Code Playgroud)

Git不是SVN - 但似乎你正在尝试使用它.你可以在文章的末尾找到一些资源在这里是一些使用的.

  • +1表示有关工作流程的说明.但是`git add .`和`git commit -a` [不是一回事](http://stackoverflow.com/questions/3541647/git-add-vs-git-commit-a) (6认同)
  • 感谢您的解释,但如果对于那些知道自己在做什么的人会有这样的命令,GIT就不会崩溃...... (5认同)
  • @Lucas:有经验的程序员会告诉你,那些要求自动提交推送命令的人不知道他们在做什么.3阶段代码签入是有原因的(如果你使用的是4阶段的功能分支). (4认同)

Raj*_*shi 34

我在.bash_profile中使用它

gitpush() {
    git add .
    git commit -m "$*"
    git push
}
alias gp=gitpush
Run Code Online (Sandbox Code Playgroud)

它执行就像

gp A really long commit message
Run Code Online (Sandbox Code Playgroud)

source ~/.bash_profile保存别名后别忘了运行.


vuh*_*990 25

您可以使用bash脚本,设置别名以启动任何命令或命令组

git commit -am "your message" && git push 
Run Code Online (Sandbox Code Playgroud)

  • 如果您希望得到答案,请添加更多有关其工作原理的评论.简单地代码转储的答案通常不受欢迎.见[答案]. (2认同)

Gav*_*vin 18

在bash中设置为别名:

$ alias lazygit="git add .; git commit -a -m '...'; git push;";
Run Code Online (Sandbox Code Playgroud)

叫它:

$ lazygit
Run Code Online (Sandbox Code Playgroud)

(要使此别名成为永久性的,您必须将其包含在.bashrc或.bash_profile中)


mic*_*czy 15

最简单的解决方案是:

git commit -a -m "commit" && git push
Run Code Online (Sandbox Code Playgroud)

git add 已包含在-a参数中,但如果您需要,可以将它们全部连接起来:

git add . && git commit -a -m "commit" && git push
Run Code Online (Sandbox Code Playgroud)


mcv*_*vkr 10

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

git commit -am "IssueNumberIAmWorkingOn --hit Enter key
> A detail here --Enter
> Another detail here --Enter
> Third line here" && git push --last Enter and it will be there
Run Code Online (Sandbox Code Playgroud)

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

在Linux/Mac中,这个非常实用的选项也应该可行

git commit -a && git push 
Run Code Online (Sandbox Code Playgroud)


Fri*_*ies 7

你可以试试gitu.

这是第一次(必须安装节点js):

npm install -g git-upload
Run Code Online (Sandbox Code Playgroud)

之后:

gitu COMMIT_MSG
Run Code Online (Sandbox Code Playgroud)

一次发出这三个命令.

好处是您在重新安装系统时或者想要在不同的计算机上执行此操作时不必担心,并且不需要修改文件. 这也适用于不同的平台(不仅仅是Linux和Mac,还有命令提示符下的Windows cmd和Windows powershell),只需要安装npmnodejs(git当然).


Ooz*_*lly 7

如果您使用的是 Mac:

  1. 启动终端并输入cd ~/以转到您的主文件夹

  2. 键入touch .bash_profile以创建新文件。

  3. 使用您最喜欢的编辑器进行编辑.bash_profile(或者您可以直接键入 open -e .bash_profile以在 TextEdit 中打开它)。

  4. 将以下内容复制并粘贴到文件中:

function lazygit() {
    git add .
    git commit -a -m "$1"
    git push
}
Run Code Online (Sandbox Code Playgroud)

之后,重新启动终端并只需添加、提交并推送一个简单的命令,例如:

lazygit "This is my commit message"
Run Code Online (Sandbox Code Playgroud)


Pet*_*oti 6

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

如果您不想编写提交消息,可以考虑做类似的事情

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


Ana*_*afi 5

结果 -试试这个:为 git add、git commit 和 git push 编写一个简单的脚本命令

在 Windows 上打开 CMD 并粘贴此答案

git commit -m "your message" . && git push origin master

这个例子是我的图片截图: https: //i.stack.imgur.com/2IZDe.jpg