我想通过终端中的管道传递一个参数作为git命令,并且按照惯例,我不知道我在做什么。在bash中通过管道传递参数
目前:git rm --cached folder/path | rm -rf folder/path | git commit -m '...'
我想不会有可能的话用的文件夹路径重复自己在第二个命令,但我不知道如何从第一个命令得到folder/path
。
这是可能的,还是我在吠叫错误的树?
我想通过终端中的管道传递一个参数作为git命令,并且按照惯例,我不知道我在做什么。在bash中通过管道传递参数
目前:git rm --cached folder/path | rm -rf folder/path | git commit -m '...'
我想不会有可能的话用的文件夹路径重复自己在第二个命令,但我不知道如何从第一个命令得到folder/path
。
这是可能的,还是我在吠叫错误的树?
你不需要做管道。
rm folder/file
git rm !$
git commit -m "your message"
在bash中学习bang(!)运算符是非常值得的。再次指定漫长的道路并不是最好的。
对于大多数我的工作流程,我可以不用它:
rm path/to/unwanted/file
git add -A # stages ALL changes in the work tree
git commit -m "my message"
如果我修复了以前提交其错误地补充说,我不希望文件,你可以修改该承诺通过将上述代码片段中的最后一次提交更改为
git commit --amend -C HEAD
这将重用当前提交中的消息。
您可能希望包含git状态的输出以及您正在尝试执行的操作。
尽管它不完全是我想要做的(再次,试图成为一个聪明的屁股),但这是解决问题的更好方法。非常感谢Adam。 – designermonkey 2012-01-11 19:07:58
我认为这应该工作:
param=/folder/path; git rm --cached $param | rm -rf $param | git commit -m '...'
编辑:@pholser解决方案与unset
去除环境变量使事情变得更清洁。这可以同时运行在一个subshell的命令:
(param=/folder/path; git rm --cached $param | rm -rf $param | git commit -m '...')
x=/folder/path && git rm --cached $x | rm -rf $x | git commit -m '...' && unset x
'$ x'会保留第一个管道后面的值吗? – 2012-01-12 00:49:14
你并不需要从索引中移除,并从文件系统分开,git rm
设计做到既去除:
git rm -r folder/path
由于既没有从您尝试的表单中读取标准输入,因此没有任何管道连接到rm
或git commit
。您可以使用;
分隔命令。
不会'folpath =“文件夹/路径”; git rm --cached $ folpath | rm -rf $ folpath | git commit -m'...''工作? – DejanLekic 2012-01-11 18:55:50
我认为是这样,但事实证明,我无法在同一行上运行commit命令,因为它会导致lockfile错误。 – designermonkey 2012-01-11 19:06:23