Git thêm và cam kết trong một lệnh


392

Có cách nào tôi có thể làm

git add -A
git commit -m "commit message"

trong một lệnh?

Tôi dường như thực hiện hai lệnh đó rất nhiều, và nếu Git có một tùy chọn như thế git commit -Am "commit message", nó sẽ giúp cuộc sống thuận tiện hơn nhiều.

git commitcó công cụ -asửa đổi, nhưng nó không hoàn toàn giống như làm git add -Atrước khi cam kết. git add -Athêm các tập tin mới được tạo, nhưng git commit -amkhông. Làm gì



1
tiết kiệm thời gian và cam kết mọi thay đổi đều tốt hơn, vì vậy tôi đang sử dụng git commit -am"yes the code in committed"
Rizo

git add .là một tùy chọn nhanh hơn để thêm tất cả
Ryan

Câu trả lời:


419

Bạn có thể sử dụng bí danh git, vd

git config --global alias.add-commit '!git add -A && git commit'

và sử dụng nó với

git add-commit -m 'My commit message'

EDIT: Hoàn nguyên trở lại dấu tick ('), vì nếu không, nó sẽ thất bại trong việc mở rộng shell trên Linux. Trên Windows , người ta nên sử dụng dấu ngoặc kép (") thay vào đó (được chỉ ra trong các nhận xét, không xác minh).


24
Sử dụng git config --global --unset alias.<your_alias>để bỏ đặt bí danh.
TMOTTM

11
@MrFusion Nó làm cho lệnh trở thành một lệnh shell bên ngoài thay vì một phím tắt trong lệnh git nội bộ, nghĩa là làm cho toàn bộ dòng được thực thi như một quy trình riêng biệt.
Martin C.

8
Tôi thích git config --global alias.add-commit '!git add -A && git commit -m'vì vậy tôi không phải gõ -mmỗi lần.
sợi đốt

21
Tôi quá lười để gõ 'add-commit' và '-m' mỗi lần. Do đó, tôi gõ: git config --global alias.ac '!git add -A && git commit -m' một lần và mỗi lần tôi chỉ gõ: git ac 'comment' :)
Navid Vafaei

5
git config --global alias.add-commit "!git add -A && git commit"(tức là dấu ngoặc kép thay vì dấu ngoặc đơn) là những gì hoạt động trên Windows.
Saheed

269
git commit -am "message"

là một cách dễ dàng để yêu cầu git xóa các tệp bạn đã xóa, nhưng tôi thường không khuyến nghị các quy trình bắt tất cả như vậy. Cam kết Git trong thực tế tốt nhất nên khá nguyên tử và chỉ ảnh hưởng đến một vài tệp.

git add .
git commit -m "message"

là một cách dễ dàng để thêm tất cả các tệp mới hoặc sửa đổi. Ngoài ra, các tiêu chuẩn bắt tất cả áp dụng. Các lệnh trên sẽ không xóa các tập tin bị xóa mà không có git rmlệnh.

git add app
git commit -m "message"

là một cách dễ dàng để thêm tất cả các tệp vào chỉ mục từ một thư mục duy nhất, trong trường hợp này là appthư mục.


41
hoặc chỉ git commit -am "message"- chỉ cần đảm bảo rằng không có tệp mới mà git chưa chọn. nếu không, bạn sẽ cần phải sử dụng git add . &&trước đó .... để thực hiện trong một dòng.
Courtimas

2
Xin lỗi nhưng câu hỏi ban đầu chính xác là về vấn đề này - tránh git add .trong trường hợp các tệp được thêm vào
gorn

50

Để giữ nó trong một dòng sử dụng:

git add . && git commit -am "comment"

Dòng này sẽ thêm và cam kết tất cả các tệp đã thay đổi và thêm vào kho lưu trữ.


12
Cần lưu ý rằng điều này là dành riêng cho hệ vỏ Linux (bash và có thể cả những thứ khác).
R. Martinho Fernandes

6
git commit -am "comment"là hoàn hảo
Abhishek Bedi

2
Nếu bạn đã sử dụng: git add . Sau đó, bạn không cần sử dụng tùy chọn -a , chỉ cần:git commit -m "comment"
Đức Chi

18

Chỉ cần kết hợp các lệnh của bạn:

git add -A && git commit -m "comment" 

18

Chỉ điều chỉnh câu trả lời của Ales và nhận xét của tòa án cho bash linux :

Để giữ nó trong một dòng sử dụng:

git commit -am "comment"

Dòng này sẽ thêm và cam kết tất cả thay đổi vào kho lưu trữ.

Chỉ cần đảm bảo rằng không có tệp mới mà git chưa chọn. nếu không, bạn sẽ cần phải sử dụng:

git add . ; git commit -am "message"


Làm thế nào để làm git commit -am "comment", nhưng chỉ cho 1 tập tin? Hãy nói file.txt .
Santosh Kumar

git commit -am "comment"là một phím tắt để thêm và cam kết tất cả các tệp đã thay đổi. Nếu bạn muốn thêm và cam kết chỉ 1 tệp hơn bạn sẽ cần phải thực thi:git add file.txt ; git commit -m "comment"
danilo

Trong trường hợp thứ hai, không cần thêm -a với m. Nó nên được thêm vào. ; Git commit -m "tin nhắn"
Manish Bansal

12

Trong phiên bản sau của git, bạn có thể thêm và cam kết như thế này

git commit -a -m "commit message"

Ngoài ra, bạn còn một bí danh:

[alias]
    ac = commit -a -m

Sau đó, bạn có thể sử dụng nó như thế này:

git ac "commit message"

6
Lệnh này sẽ không cam kết các tệp mới, chỉ những tệp được cập nhật.
ruvim

11

Trên máy tính windows của tôi, tôi đã thiết lập .bashrcbí danh này để làm cho toàn bộ quá trình đơn giản hơn.

  • tạo / xác định vị trí của bạn .bashrc- tham khảo SO chủ đề
  • thêm dòng sau vào tập tin

    alias gacp='echo "enter commit message : " && read MSG && git add . && git commit -m "$MSG" && git push'
    

    Nó không git thêm cam kết và đẩy. tinh chỉnh nó theo bất kỳ cách nào, nói rằng bạn không muốn lệnh đẩy loại bỏ phần đó

  • tải lại .bashrc/ đóng và mở lại vỏ của bạn

  • bây giờ bạn có thể thực hiện toàn bộ quá trình với gacplệnh.

FYI mà kịch bản có một git pushtrong đó. Đừng sao chép và dán nó.
Yar

11

khá chắc chắn bạn có thể sử dụng:

git commit -am "commit all the things"

1
Lệnh này là cách ngắn nhất và có lẽ là cách dễ nhất để đạt được kết quả cần thiết. Kiểm tra phiên bản git 2.6.3.windows.1.
Ithar

5
Điều này sẽ không cam kết các tập tin mới được thêm vào, chỉ những người "cập nhật"!
dùng13107

1
ĐÚNG nó sẽ không bắt đầu theo dõi các tệp không được theo dõi
Blair Anderson

@BlairAnderson - Có lệnh nào để thêm các tệp không được theo dõi cũng bằng add và commit không?
MasterJoe2

6

Nếu bạn gõ:

git config --global alias.a '!git add -A && git commit -m'

một lần, bạn sẽ chỉ cần gõ

git a

mỗi lần:

git a 'your comment'

4
đây phải là câu trả lời hàng đầu, siêu dễ và bao gồm các tệp UNTRACKED không giống như hầu hết các đề xuất khác.
JesseBoyd

6

Chỉ dùng:

git commit -m "message" .     

Lưu ý "." ở cuối ... cũng có thể là đường dẫn đến tệp / thư mục


điều này sẽ làm việc cho các tệp mới được tạo hoặc chỉ những tệp hiện có được thay đổi?
MasterJoe2

5

Tôi làm một cái vỏ

#!/bin/sh

clear

git add -A 
git commit -a -m "'$*'"

lưu ví dụ git.sh và gọi sau:

sh git.sh your commit message

1
không thể di chuyển đến các hệ điều hành khác và git có thể tự làm điều này, vậy vấn đề là gì?
ness101

2
@ naught101 Rõ ràng là git có thể tự làm điều này, vấn đề là lớp vỏ này phục vụ để hợp lý hóa quy trình cho những người sử dụng git trên linux, đơn giản hơn nhiều để chạy sh git.sh thông điệp cam kết của bạn và không được thực hiện không có nghĩa là nó sẽ hoạt động đúng.
ademar111190

5

Tôi có chức năng này trong tôi .bash_profilehoặc .profilehoặc .zprofilehoặc bất cứ điều gì được bắt nguồn trong vỏ đăng nhập:

function gac () {
  # Usage: gac [files] [message]
  # gac (git add commit) stages files specified by the first argument
  # and commits the changes with a message specified by the second argument.
  # Using quotes one can add multiple files at once: gac "file1 file2" "Message".
  git add $1 && git commit -m "$2"
}

3

Bạn ca sử dụng -a

git commit -h

...
Commit contents options
    -a, -all    commit all changed files
...

git commit -a # It will add all files and also will open your default text editor.

2

Tôi hy vọng điều này sẽ giúp được ai đó và xin vui lòng chỉnh sửa hoặc cải thiện. Tôi không chắc cách nhanh nhất là gì nhưng điều này chắc chắn đơn giản hóa quy trình cam kết mã của tôi bằng cách sử dụng "ohmyzsh" cho Git .

https://ohmyz.sh/

  • git add . được rút ngắn thành ga .
  • git commit -m "message" được rút ngắn thành gc -m "message"
  • git push được rút ngắn thành gp

nhập mô tả hình ảnh ở đây


1

Tôi sử dụng các mục sau (cả hai đều đang được tiến hành, vì vậy tôi sẽ cố gắng cập nhật thông tin này):

# Add All and Commit
  aac = !echo "Enter commit message:" && read MSG && echo "" && echo "Status before chagnes:" && echo "======================" && git status && echo "" && echo "Adding all..." && echo "=============" && git add . && echo "" && echo "Committing..." && echo "=============" && git commit -m \"$MSG\" && echo "" && echo "New status:" && echo "===========" && git status

# Add All and Commit with bumpted Version number
  aacv = !echo "Status before chagnes:" && echo "======================" && git status && echo "" && echo "Adding all..." && echo "=============" && git add . && echo "" && echo "Committing..." && echo "=============" && git commit -m \"Bumped to version $(head -n 1 VERSION)\" && echo "" && echo "New status:" && echo "===========" && git status

Với echo "Enter commit message:" && read MSGphần lấy cảm hứng từ Sojan V Jose

Tôi rất muốn nhận được một if elsetuyên bố trong đó vì vậy tôi có thể nhận được aacv để hỏi tôi có muốn triển khai khi hoàn thành hay không và làm điều đó cho tôi nếu tôi nhập 'y', nhưng tôi đoán tôi nên đưa nó vào .zshrctệp của mình


1

Tôi sử dụng bí danh sau để thêm tất cả và cam kết :

git config --global alias.ac '!git add -A && git commit -a'

Sau đó, bằng cách gõ:

git ac

Tôi nhận được một cửa sổ vim để có thêm công cụ chỉnh sửa cho thông điệp cam kết của mình.


Tôi nên kiện bạn vì đạo văn. :)
Navid Vafaei

Vui lòng giải thích cái nhìn sâu sắc khác nhau mà câu trả lời của bạn cung cấp khi so sánh với câu trả lời cũ hơn đáng chú ý của Navid.
Yunnosch

@Yunnosch Tôi đoán tôi đã không thấy câu trả lời của Navid trước khi đăng vì anh ấy "quá lười": P để đăng nó dưới dạng một câu trả lời đầy đủ. Thật vậy, nó giống nhau, và thực sự tôi có bí danh này từ rất lâu rồi, đã mượn nó từ một đồng nghiệp. Vì vậy, tôi đoán chúng ta có thể gọi đây là: chuỗi đạo văn. Xin lỗi nếu nó làm phiền bạn.
Gus

1

Trong trường hợp ai đó muốn "thêm và cam kết" cho một tệp duy nhất, đó là trường hợp của tôi, tôi đã tạo tập lệnh dưới đây để làm điều đó:

#!/bin/bash

function usage {
    echo "Usage: $(basename $0) <filename> <commit_message>"    
}

function die {
    declare MSG="$@"
    echo -e "$0: Error: $MSG">&2
    exit 1
}

(( "$#" == 2 )) || die "Wrong arguments.\n\n$(usage)"

FILE=$1
COMMIT_MESSAGE=$2

[ -f $FILE ] || die "File $FILE does not exist"

echo -n adding $FILE to git...
git add $FILE || die "git add $FILE has failed."
echo done

echo "commiting $file to git..."
git commit -m "$COMMIT_MESSAGE" || die "git commit has failed."

exit 0

Tôi đặt tên cho nó là "gitfile.sh" và thêm nó vào $ PATH của tôi. Sau đó, tôi có thể chạy git add và commit cho một tệp trong một lệnh:

gitfile.sh /path/to/file "MY COMMIT MESSAGE"

0

Tôi sử dụng bí danh git này:

git config --global alias.cam '!git commit -a -m '

Vì vậy, thay vì gọi

git add -A && git commit -m "this is a great commit"

Tôi vừa làm:

git cam "this is a great commit"


0

bạn có thể sử dụng git commit -am "[bình luận]" // giải pháp tốt nhất hoặc git add. && git cam kết -m "[bình luận]"


0

Trước tiên hãy kiểm tra những bí danh bạn có ...

git config --get-regexp alias

Nếu nó không ở đó, bạn có thể tự tạo (tham khảo: https://git-scm.com/book/en/v2/Git-Basics-Git-Aliases )

// git thêm

git config --global alias.a '!git add -A'

// git cam kết

git config --global alias.c '!git commit'

// git cam kết -m

git config --global alias.cm '!git commit -m'

// git thêm cam kết

git config --global alias.ac '!git add -A && git commit'

// git thêm cam kết -m

git config --global alias.acm '!git add -A && git commit -m'

Chẳng hạn, nếu bạn sử dụng cái cuối cùng ...

git acm 'My commit'

0
  1. Tạo một bí danh trong bash: alias gac="git add -A && git commit -m"

    (Tôi đã chọn gọi phím tắt là 'gấc' nhưng bạn không phải)

  2. Sử dụng nó: gac 'your commit message here'


0

Đối với những người ủng hộ bạc trong đám đông đã quen với những thứ như Subversion ... để thực hiện một "cam kết" theo nghĩa cũ của từ này (tức là - hoặc trong git speak - để thêm, cam kết và đẩy) trong một một bước Tôi thường thêm một cái gì đó như sau vào thư mục gốc của dự án của tôi (dưới dạng tệp dơi trong windows, ví dụ như git-commit.bat). Sau đó, khi tôi muốn thêm, cam kết và đẩy, tôi chỉ cần gõ một cái gì đó như thế git-commit "Added some new stuff"và tất cả đi đến repo từ xa.

Ngoài ra, theo cách này, bất kỳ ai trong dự án cũng có thể sử dụng tương tự mà không phải thay đổi bất cứ điều gì cục bộ.

Tôi cũng thường chạy git config credential.helper storemột lần vì vậy tôi không cần phải cung cấp uid / pwd khi nó được chạy.

::
:: add, commit, and push to git
::

@echo off
echo.
echo.
echo 
echo Doing commit...
git add -A && git commit -m %1
echo.
echo.
echo Doing push...
git push
echo.
echo.
echo Done.
echo.

0

Điều này làm việc cho tôi luôn luôn vui lòng chạy các lệnh sau:

1.git add .
2.git commit -m "no bugs please"
3.git push origin *

trong đó * dựa trên nhánh bạn đang đẩy tới và các thông điệp cam kết luôn có thể được thay đổi cho phù hợp với bối cảnh.


-1
  1. git add . && git commit -amvà nhập
  2. historyvà nhập
  3. nhớ số cho lệnh trên, nói số đó là 543
  4. Từ giờ trở đi, đối với mọi loại cam kết !543 "your comment here"tức là dấu chấm than + số và khoảng trắng và nhận xét của bạn.

4
Tôi đã từ chối vì đó là một giải pháp thực sự kỳ lạ có thể phá vỡ mọi thứ theo những cách khủng khiếp khi lịch sử của bạn hết hạn và lệnh thứ 543 trở thành một thứ khác.
bfontaine

-2

Kết quả này - Hãy thử điều này: Tập lệnh đơn giản một lệnh cho git add, git commit và git đẩy

Mở CMD của bạn trên Windows và dán câu trả lời này

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

Ví dụ này ảnh chụp màn hình của tôi: https://i.stack.imgur.com/2IZDe.jpg


-4

Để giữ nó trong một dòng sử dụng:

gacm "your comment"

2
Bạn có thể cung cấp một số nền tảng về điều này hoặc một liên kết hoặc một cái gì đó?
Gershom

7
Tôi nghĩ rằng poster này đang làm việc với các bí danh và không nhận ra nó. Để thực hiện công việc trên, bạn muốn thêm một bí danh shell như alias gacm="git add .; git commit -m"hoặc (tốt nhất là tôi nghĩ) một bí danh git như thế nào git config --global alias.gacm '!git add .;git commit -m'.
Phát triển đơn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.