2013-04-21 25 views
41

tôi thường quên rằng tôi có một số tập tin mới và trực tiếp làm,Git: cam kết và tự động thêm tất cả các file untracked

git commit -a -m "My commit message" 

này chỉ cam kết thay đổi tập tin, và tôi phải làm thêm các tập tin còn lại trong một mới cam kết. Điều này có nghĩa rằng có hai cam kết riêng biệt mặc dù một cách hợp lý chúng là một phần của cùng một nhiệm vụ.

Cách đơn giản nhất mà tôi biết để bao gồm các file untracked trong cam kết thông qua hai lệnh liên tục:

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

Có thể có tác dụng tương tự như trên trong một lệnh?

+6

Tại sao không 'git commit --amend' trước đó cam kết khi bạn thêm các tập tin untracked ? – Richard

+0

'git add -A' có thông báo này trong trang hướng dẫn:' Nếu không có , phiên bản Git mặc định hiện hành là "."; nói cách khác, cập nhật tất cả các tệp trong thư mục hiện tại và các thư mục con của nó. Mặc định này sẽ thay đổi trong một phiên bản tương lai của Git, do đó biểu mẫu không cần sử dụng . ' –

Trả lời

0

Không thể sử dụng giao diện mặc định git. Tuy nhiên, git hỗ trợ bí danh.

Sử dụng bí danh, có thể gọi lệnh git khác hoặc thậm chí chạy tập lệnh shell tùy ý. Tạo một kịch bản có chứa hai lệnh, và bí danh nó.

Xem the wiki để biết thêm thông tin về bí danh và this question cho trường hợp cụ thể này.

Chỉnh sửa: lưu ý rằng đây không phải là một ý tưởng hay. Cơ hội là bạn sẽ kết thúc việc thêm các tệp không cần thiết do nhầm lẫn hoặc có bí danh vô dụng do các tệp không được phiên bản trong cây.

13

Tạo một file trong đường dẫn thực thi của bạn được gọi là (không mở rộng): git-add-commit-untracked

Đặt này trong đó:

#!/bin/bash 
message=${0} 
git add -A 
git commit -am "$message" 

Sau đó: git-add-commit-untracked "Commit message"

Bạn có thể sử dụng một tên ngắn hơn cho tập tin mặc dù. Tôi để nó dài cho mục đích minh họa.

+5

Điều này có thể được thực hiện đơn giản hơn như một bí danh git. Xem câu trả lời của tôi ở đây: http://stackoverflow.com/questions/16068968/is-it-possible-to-skip-the-staging-area-and-also-commit-untracked-new-files-t/16069173#16069173 –

0

Vâng, tôi đã gặp vấn đề tương tự như bạn trong quá khứ. Tôi thích sử dụng lệnh git, nhưng tôi gặp phải một vấn đề lớn vì người bảo vệ trong đường ray đã thay đổi nhiều tệp mà không cần cảnh báo :)

Vì vậy, bây giờ, khi tôi thực hiện mã mới, tôi cố gắng sử dụng giao diện người dùng để thực hiện điều này (git gui) và lưu ý rằng không bao giờ sử dụng git commit -a vì bạn không chắc chắn tệp nào đã được sửa đổi! Sau khi rebase mã mới, xin vui lòng bạn gitk để xem cây git, vì vậy bạn có thể biết cam kết cuối cùng, các ủy thác, cam kết tập tin và như vậy.

7

Dưới đây là một vài lựa chọn:

  • Sử dụng git commit --amend để bạn kết thúc với chỉ có một cam kết sau khi thêm các tập tin untracked (nhưng không phải nếu bạn đã đẩy cam kết trước đó);
  • Sử dụng ;
  • Tạo bí danh hoặc tập lệnh tự động thêm tệp mới (ví dụ trong các câu trả lời khác).Dưới đây là hai bí danh mà tôi sử dụng cho mục đích này chính xác:

    [alias] 
        untracked = ls-files --other --exclude-standard 
        add-untracked = !git add $(git untracked) 
    
  • Squash hai cam kết của bạn sử dụng git rebase -i, git reset <commit prior to first commit>git commit, hoặc git merge --squash vào chi nhánh khác.

Tuy nhiên, bạn không override một lệnh dựng sẵn như commit với một bí danh, vì vậy nó vẫn là tùy thuộc vào bạn phải nhớ để thêm các tập tin mà bạn muốn chỉ số trước khi cam kết có thể.

Thật không may là tốt, bạn không thể chỉ định đường dẫn cùng với git commit -a; Tôi chỉ cố gắng git commit -a $(git untracked) và nó nói với tôi fatal: Paths with -a does not make sense. Vì vậy, để trả lời câu hỏi cơ bản của bạn, tôi nghĩ rằng một kịch bản git sẽ là cách duy nhất không tương tác.

+4

Tuy nhiên hữu ích này là, nó * trả lời câu hỏi khác nhau * sau đó auhor đã yêu cầu. – gorn

+0

@gorn Tôi không chắc bạn đã hỏi câu hỏi nào, nhưng câu trả lời này cũng cung cấp một số tùy chọn và đề cập đến các câu trả lời khác. – Richard

+1

Câu hỏi là khá rõ ràng "Có thể có tác dụng tương tự như trên trong một lệnh?", Về cơ bản "Làm thế nào để làm toàn bộ hành động trong một lệnh và tránh nhầm lẫn không thêm một số tệp" và trả lời này địa chỉ " Làm thế nào để sửa chữa hậu quả sau khi sai lầm đã được thực hiện ". Tôi nghĩ rằng đó là khó hiểu đối với những người mới đến và đó là lý do tại sao tôi bình luận ở đây. – gorn

7

Bạn có thể xác định bí danh để thêm tất cả trước khi cam kết. Chỉ cần đặt dòng này vào tập tin ~/.gitconfig của bạn:

[alias] 
     ca = !sh -c 'git add -A && git commit -m \"$1\"' - 

Sau đó sử dụng bí danh của bạn như thế này:

$ git ca 'Your commit message' 
+0

NÀY. Hoàn toàn hoàn hảo. – neokio

Các vấn đề liên quan