git别名:使用参数提交&;按一个命令

git别名:使用参数提交&;按一个命令,git,push,commit,Git,Push,Commit,我试图说服我的同事离开svn,转而使用git。我看到的一个问题是:必须分别执行git提交和git推送,这既复杂又容易出错。所以我考虑使用git ci别名,它提交更改并将其直接推送到服务器。我知道怎么做,但是: 问题是,我想给git commit提供像-m“”这样的参数。所以 git ci -m "Cool change" 应该执行 git commit -m "Cool change" && git push 如何才能做到这一点?对于将参数作为别名添加到多个命令之一的一般问题

我试图说服我的同事离开svn,转而使用git。我看到的一个问题是:必须分别执行git提交和git推送,这既复杂又容易出错。所以我考虑使用git ci别名,它提交更改并将其直接推送到服务器。我知道怎么做,但是:

问题是,我想给git commit提供像-m“”这样的参数。所以

git ci -m "Cool change"
应该执行

git commit -m "Cool change" && git push

如何才能做到这一点?

对于将参数作为别名添加到多个命令之一的一般问题,git别名的工作原理几乎与普通*nix别名完全相同。唯一的区别在于,除非git别名以
开头
假定命令前面应该有
git
。任何与别名结合使用的参数都是前置的,要将参数插入到命令的日志字符串中,您需要某种shell命令来解析参数。有关参数,请参见示例

但特别是这个问题。我同意其他人的看法,这是一件有益的事情。如果你打算在提交后立即推送,我假设每个用户都有自己的公私回购协议(仅供他人阅读),这样推送“永远”不会失败,这意味着它的工作方式与svn非常不同;他们必须从不同的回购协议等中提取资金

如果您使用的是一个公共的“主回购”,每个人都会拉和推,这将是一个更糟糕的想法,因为当推不可避免地会失败时,他们会接受培训,不使用“提交”然后使用“推”,而是使用您的“ci”别名来提交和推送更改;当他们尝试“重新提交”更改时,第二部分将不会运行,因为第一个命令没有以成功状态完成(但是打印
没有添加到提交中的更改(使用“git add”和/或“git commit-a”)

您可以像“git acquisition”项目一样“隐藏”git。这将使您能够添加看起来像git命令的脚本。您的基本流程应该是:

git pull --rebase
所以历史是线性的,就像他们在SVN的更新中习惯的那样。但您必须告诉他们,他们可能需要消除冲突,并告诉他们或alias
git add-A&&git rebase——continue
。我建议打开Reere并在团队中共享这些解决方案,并将脚本附加到您将为此制作的“别名”上

接下来,使用以下内容隐藏提交:

git add -A
git commit -m "message"
git pull --rebase
git push origin <current branch> # or set up tracking and omit the last 2 args
git添加-A
git提交-m“消息”
git-pull——重基
git推送原点#或设置跟踪并忽略最后2个参数
这些在冲突中也应该失败

以下是git成就的链接:


虽然我认为从长远来看,这对他们没有帮助,但我希望这对现在有所帮助。

Cudos感谢您试图说服您的同事采用git路线。我真想知道他们为什么不想单独提交和推动。是什么让您认为单独完成这些任务容易出错或复杂?你真的希望每一次承诺都是一次推动吗?我同意杰米的看法。在如何组织您的工作以及提交的粒度方面,能够在本地提交给您巨大的自由。你可以做许多小的提交,这样每个更改都会被记录下来,并且可以恢复,但是如果它们对社区没有意义,你可以在它们全部完成后将它们全部推送。此外,你还可以与诸如网络带宽或(实际上)可用性之类的讨厌的事情隔离开来。我喜欢经常提交并推送一次。但是要留下一个有经验的工作流程是很困难的,所以一开始就应该尽可能简单。我还要说服我们的经理,他希望在一天结束前把一切都做好。即使使用may alias,他们也可以自由地使用git提交和推送。你继续以svn风格使用git,这对你自己和你的同事都是一种伤害。我给你的建议是抓住牛角,教你的同事区别。否则,他们将永远不会学习git,永远呆在舒适的svn区域。