2013-10-25 37 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 
} 
相關問題