Làm cách nào tôi có thể tạo giai đoạn và cam kết tất cả các tệp, bao gồm các tệp mới được thêm bằng một lệnh duy nhất?


425

Làm cách nào tôi có thể tạo giai đoạn và cam kết tất cả các tệp, bao gồm các tệp mới được thêm bằng một lệnh duy nhất?


3
Điều khó chịu là điều này từng có thể và là cú pháp chuẩn để cam kết và thêm bất kỳ tệp mới nào: git commit -a Nhưng đúng với hình thức, cú pháp git đã thay đổi. Nó nhầm lẫn người dùng hiện tại (và phá vỡ tập lệnh của họ), loại bỏ chức năng hữu ích và thay thế một cờ không cần thiết.
fijiaaron

1
Có một bản sao này tại git add -A, git commit trong một lệnh? . Câu trả lời được chấp nhận tương tự như câu trả lời được chấp nhận ở đây nhưng đề nghị tạo một bí danh git để rút ngắn cách gõ liên quan (và chỉ ra cách thực hiện).
Đánh dấu Amery

Bản sao có thể có của Git thêm và cam kết trong một lệnh
Luciano

Câu trả lời:


567

Làm

git add -A && git commit -m "Your Message"

được tính là một "lệnh đơn"?

Chỉnh sửa dựa trên câu trả lời của @ thefinnomenon bên dưới :

Để có nó như một git alias, sử dụng:

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

và cam kết tất cả các tệp, bao gồm các tệp mới, với một thông báo với:

git coa "A bunch of horrible changes"

Giải thích (từ git addtài liệu ):

-A, --all, --no-bỏ qua-loại bỏ

Cập nhật chỉ mục không chỉ nơi cây làm việc có tệp phù hợp mà cả nơi chỉ mục đã có mục. Điều này thêm, sửa đổi và loại bỏ các mục chỉ mục để phù hợp với cây làm việc.

Nếu không <pathspec>được đưa ra khi tùy chọn -A được sử dụng, tất cả các tệp trong toàn bộ cây làm việc sẽ được cập nhật (các phiên bản cũ của Git được sử dụng để giới hạn cập nhật vào thư mục hiện tại và các thư mục con của nó).


3
Còn thông điệp cam kết thì sao?
Narendra Jaggi

11
@NarendraJaggi git add -A && git commit -m "Tin nhắn của bạn"
Dr.jacky

1
người ta có thể đặt nó trong tệp .sh hoặc .bat của riêng nó và chỉ sử dụng nó như một lệnh. Tin nhắn có thể là param1
BlueWizard

Và bạn cũng có thể thêm các phím tắt cho các lệnh git cơ bản trong .bashrc: alias gpl = 'git pull' alias gps = 'git push' alias gc = 'git commit' alias gs = 'git status' alias gd = 'git diff' alias ga = 'git add' alias gck = 'git checkout' alias gb = 'git Branch' alias gl = 'git log' alias lcp = 'git format-patch -1 HEAD' alias resetToMaster = 'git reset --hard origin / chủ '
ni3

3
Trong powershell thay thế "&&" cho ";" để chạy cả hai lệnh, như thế này:git add -A ; git commit -m "Your Message"
Rafael Miceli

415

Lệnh này sẽ thêm và cam kết tất cả các tệp đã sửa đổi, nhưng không phải các tệp mới được tạo .

git commit -am  "<commit message>"

Từ người đàn ông git-commit:

   -a, --all
       Tell the command to automatically stage files that have been modified
       and deleted, but new files you have not told Git about are not
       affected.

100
Điều này không thực sự trả lời câu hỏi, trong thực tế cụ thể (in đậm không ít) loại trừ một trong những phần chính của giải pháp tìm kiếm.
Arunas

6
Không thêm hoặc cam kết các tập tin không bị theo dõi.
b15

3
Nhưng nó bao gồm tình huống điển hình nhất khi bạn cam kết sau "git add -A" và nhận thấy rằng bạn đã quên thay đổi một cái gì đó nhỏ trong mã. Tôi ghét phải viết cùng một thông điệp cam kết nhiều lần từ đầu
KorbenDallas

nhưng người bắt đầu chủ đề nói TẤT CẢ CÁC PHIM, vì vậy, tôi nghĩ rằng điều này không được tính
Frederick G. Sandalo

Và bạn cũng có thể thêm các phím tắt cho các lệnh git cơ bản trong .bashrc: alias gpl = 'git pull' alias gps = 'git push' alias gc = 'git commit' alias gs = 'git status' alias gd = 'git diff' alias ga = 'git add' alias gck = 'git checkout' alias gb = 'git Branch' alias gl = 'git log' alias lcp = 'git format-patch -1 HEAD' alias resetToMaster = 'git reset --hard origin / chủ '
ni3

26

Tôi sử dụng chức năng này:

gcaa() { git add --all && git commit -m "$*" }

Trong tập tin cấu hình zsh của tôi, vì vậy tôi chỉ có thể làm:

> gcaa This is the commit message

Để tự động giai đoạn và cam kết tất cả các tập tin.


1
cho bash-likefunction gcaa() { git add --all && git commit -m "$*" && git push }
Damilola

1
@Damilola - ý của bạn giống như bash là gì? cú pháp trong câu trả lời cũng hoạt động trong bash
Eliran Malka

Điều này thật tuyệt, trước đây tôi đã sử dụng một bí danh như thế gaa && gc -m "my commit"nhưng điều này đẹp hơn rất nhiều ... <scurries off để thay đổi bashrc ..>
andy mccullough


24

Không chắc tại sao những câu trả lời này lại nhảy xung quanh những gì tôi tin là giải pháp phù hợp nhưng với những gì đáng giá ở đây là những gì tôi sử dụng:

Tạo một bí danh:

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

Thêm tất cả các tệp và cam kết với tin nhắn:

git coa "A bunch of horrible changes"

LƯU Ý: coalà viết tắt của cam kết tất cả và có thể được thay thế bằng bất cứ điều gì trái tim bạn mong muốn


1
Không có câu trả lời nào khác ngoài việc này đơn giản hóa thành công quá trình cam kết tất cả bằng một tin nhắn.
Seph Reed

2
Điều này thật tuyệt vời, đã tìm kiếm git aliascon đường, phần còn lại là nhàm chán.
Qortex

9

Cam kết trong git có thể là một quá trình nhiều bước hoặc một bước tùy thuộc vào tình huống.

  1. Tình huống này là nơi bạn có nhiều tệp được cập nhật và muốn cam kết:

    Bạn phải thêm tất cả các tệp sửa đổi trước khi bạn cam kết bất cứ điều gì.

    git add -A
    

    hoặc là

    git add --all
    
  2. Sau đó, bạn có thể sử dụng cam kết tất cả các tệp đã thêm

    git commit
    

    với điều này, bạn phải thêm thông điệp cho cam kết này.


6

Nếu bạn chỉ muốn một cách "nhanh và bẩn" để xóa các thay đổi trên nhánh hiện tại, bạn có thể sử dụng bí danh sau:

git config --global alias.temp '!git add -A && git commit -m "Temp"'  

Sau khi chạy lệnh đó, bạn chỉ cần gõ git tempđể git tự động cam kết tất cả các thay đổi của bạn đối với nhánh hiện tại dưới dạng một cam kết có tên là "Temp". Sau đó, bạn có thể sử dụng git reset HEAD~sau này để "không phổ biến" các thay đổi để bạn có thể tiếp tục thực hiện chúng hoặc git commit --amendđể thêm nhiều thay đổi cho cam kết và / hoặc đặt cho nó một tên thích hợp.


4

Tôi có trong cấu hình của mình hai bí danh:

alias.foo=commit -a -m 'none'
alias.coa=commit -a -m

nếu tôi quá lười biếng, tôi chỉ cam kết thay đổi với

git foo

và chỉ cần thực hiện một cam kết nhanh chóng

git coa "my changes are..."

coa là viết tắt của "cam kết tất cả"


9
Tôi ghét làm việc với một kho chứa đầy thông điệp cam kết nói "không" và tôi cũng từ chối bất kỳ PR nào trên cơ sở đó. Thật không may, cách duy nhất bạn có thể học được tầm quan trọng của việc có các thông điệp cam kết tốt là khi bạn phải quay lại để kiểm tra một cái gì đó được viết từ lâu ("dòng này gây ra lỗi ... tại sao nó lại được thêm vào, và sẽ có bất cứ điều gì phá vỡ nếu tôi thay đổi / loại bỏ nó? ").
gregmac

1
Cam kết với "không" không bao giờ có ý định ở lại lâu dài. Thông thường tôi bắt đầu nhánh tính năng của riêng mình, thực hiện các cam kết vi mô và ép chúng vào một cái gì đó hợp lý hơn trước khi hợp nhất. Rõ ràng những người thực hiện các cam kết cho từng chức năng đã sửa đổi và không bận tâm đến một nhật ký git đầy đủ không cần điều này.
SystematicFrank

1
Tôi sử dụng 'wip' (viết tắt của "công việc đang tiến hành") thay vì 'không' cho mục đích này và tôi chỉ đẩy các cam kết đó đến các chi nhánh riêng của mình.
Sergej Koščejev

Điều đó vẫn không có ích gì, vì cuối cùng những cam kết "xóa sổ" hoặc "không" sẽ biến nó thành một nhánh mà người khác nhìn thấy và sẽ làm ô nhiễm nhật ký tin nhắn. Nếu bạn đang đè bẹp tất cả các cam kết của mình trước khi bạn đẩy thì điều đó có thể chấp nhận được nhưng điều đó vẫn gây khó chịu cho đội.
Jordan

Đây là một ý tưởng tuyệt vời và bằng cách kết hợp nó với câu trả lời tiếp theo, bạn thực sự có thể nhận được câu trả lời chính xác 100% cho OP. Tôi thực sự đã phác thảo các bước cần thiết (sử dụng git-bash) trong câu trả lời của tôi. ( stackoverflow.com/a/43442269/869239 )
VeRo

3

Chạy lệnh đã cho

git add . && git commit -m "Changes Committed"

Tuy nhiên, ngay cả khi nó có vẻ là một lệnh đơn lẻ, đó là hai lệnh riêng biệt chạy từng cái một. Ở đây chúng tôi chỉ sử dụng &&để kết hợp chúng. Nó không khác nhiều so với chạy git add .git commit -m "Changes Committed"riêng biệt. Bạn có thể chạy nhiều lệnh với nhau nhưng vấn đề trình tự ở đây. Làm thế nào nếu bạn muốn đẩy các thay đổi đến máy chủ từ xa cùng với việc dàn dựng và cam kết bạn có thể thực hiện như đã cho,

git add . && git commit -m "Changes Committed" && git push origin master

Thay vào đó, nếu bạn thay đổi trình tự và đặt pushthành đầu tiên, nó sẽ được thực hiện trước và không đưa ra mong muốn sau khi dàn dựng và cam kết chỉ vì nó đã chạy trước.

&&chạy lệnh thứ hai trên đường dây khi lệnh đầu tiên trở lại thành công, hoặc với một mức độ lỗi của 0. Ngược lại với &&||, chạy lệnh thứ hai khi lệnh đầu tiên không thành công, hoặc với một mức độ lỗi của 1.

Ngoài ra, bạn có thể tạo alise như git config --global alias.addcommit '!git add -a && git commit -m'và sử dụng nó nhưgit addcommit -m "Added and commited new files"


2

Câu trả lời tuyệt vời, nhưng nếu bạn tìm kiếm một dòng singe làm tất cả, bạn có thể nối, bí danh và tận hưởng sự tiện lợi:

git add * && git commit -am "<commit message>"

Đó là một dòng đơn nhưng hai lệnh và như đã đề cập, bạn có thể đặt bí danh cho các lệnh này:

alias git-aac="git add * && git commit -am " (không gian ở cuối là quan trọng) bởi vì bạn sẽ tham số hóa lệnh tay ngắn mới.

Từ thời điểm này, bạn sẽ sử dụng bí danh này:

git-acc "<commit message>"

Về cơ bản bạn nói:

git, thêm cho tôi tất cả các tệp không bị theo dõi và cam kết chúng với thông điệp cam kết đã cho này.

Hy vọng bạn sử dụng Linux, hy vọng điều này sẽ giúp.


0

Bạn có thể viết một đoạn script nhỏ (nhìn vào câu trả lời của Ian Clelland) được gọi là git-commitallsử dụng một số lệnh git để thực hiện những gì bạn muốn làm.
Đặt kịch bản này ở bất cứ nơi nào trong của bạn $PATH. Bạn có thể gọi nó bằng git commitall... rất tiện dụng!

Tìm thấy ở đây (câu hỏi và tất cả các câu trả lời không may bị xóa, chỉ hiển thị với uy tín cao)


Toàn bộ chủ đề là một bài đọc tốt ... đó là lý do tại sao tôi liên kết nó ^^
tanascius

@Dimitri - thật không may, một số người studid đã quyết định xóa chủ đề hữu ích này. Nó vẫn có thể nhìn thấy với danh tiếng cao, vì vậy tôi giữ liên kết ở đây.
tanascius

0

thử sử dụng:

git add . && git commit -m "your message here"
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.