我想通過終端中的管道傳遞一個參數作爲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