2015-05-23 17 views
5

tôi thường gặp phải các tình huống sau:Làm cách nào để thêm các tệp cụ thể vào git theo số của chúng trong trạng thái git?

modified: assembly/main.debug.s 
modified: ../src/cd/Config.java 
modified: ../src/cd/memoization/cfg/SubgraphFinder.java 
modified: ../src/cd/memoization/cfg/SubgraphMap.java 
modified: ../src/cd/profiler/Profile.java 
modified: ../test/cd/test/TestSamplePrograms.java 
modified: ../../notes/20150521.txt 

Ở đây tôi có một loạt các tập tin và tôi muốn bao gồm chúng trong các cam kết khác nhau. Những gì tôi làm cho đến nay là thực hiện một loạt các git add <pathspec> theo sau là git commit tương ứng. <pathspec> là những gì làm phiền tôi. Có cái gì như sau?

1 modified: assembly/main.debug.s 
2 modified: ../src/cd/Config.java 
3 modified: ../src/cd/memoization/cfg/SubgraphFinder.java 
4 modified: ../src/cd/memoization/cfg/SubgraphMap.java 
5 modified: ../src/cd/profiler/Profile.java 
6 modified: ../test/cd/test/TestSamplePrograms.java 
7 modified: ../../notes/20150521.txt 

git magic 2,3,5 -m "My super simple commit"

+0

"Tôi có một loạt tệp và tôi muốn đưa chúng vào các cam kết khác nhau". ok vì vậy bạn đang thực sự cố gắng để làm điều đó đòi hỏi điều đó là gì? Tất cả các tập tin được bao gồm trong bất kỳ repo git. Nếu bạn thay đổi một tập tin, thay đổi tồn tại trên một nhánh ở đâu đó, ngay cả khi chỉ cần làm chủ. Bạn đang cố gắng đạt được gì (bức tranh lớn) đang dẫn bạn đến câu hỏi này? –

+0

Vì vậy, bạn muốn một cái gì đó như 'git commit -a -m" .... "', nhưng nó nên được chọn lọc (không phải tất cả các tập tin đã sửa đổi khi nó được thực hiện với '-a')? Điều đó thực sự giống như một tính năng thú vị để tiết kiệm thời gian – Slizzered

+0

Nghe có vẻ như bạn đang tìm kiếm một giao diện cho git, một cái gì đó giống như Magit, có lẽ? https://www.masteringemacs.org/article/introduction-magit-emacs-mode-git – asjo

Trả lời

10

Ví dụ repo:

Tôi đang sử dụng một ví dụ repo với bốn tập tin: a, b, c, d.
Ở đây a được theo dõi, thay đổi và tổ chức; b được theo dõi, thay đổi và không được tổ chức; c không được theo dõi và tổ chức; d là không đúng.

enter image description here

Công cụ bên ngoài: git-number

Khi chạy mà không có lý lẽ, 'số git' chạy 'status git' và đính kèm một số duy nhất cho mỗi dòng filename in bằng 'status git', và nó sẽ 'nhớ' liên kết số-tên-tập-tin này. Khi chạy với đối số, như thế này:

$ git number <any git command> [one or more numbers or git options/args] 

'số git' sẽ chạy đó và subtitute tất cả các con số để tên tập tin tương đương của họ. Đối số không phải số được chuyển nguyên vẹn sang git.

enter image description here

này có sẵn với các lệnh khác.

enter image description here

Công cụ bên ngoài: SCM Breeze

SCM Breeze là một tập hợp các kịch bản shell (ví bash và zsh) tăng cường sự tương tác của bạn với git. Nó tích hợp với trình bao của bạn để cung cấp cho bạn các phím tắt tập tin được đánh số, một chỉ mục kho lưu trữ với hoàn thành tab và nhiều tính năng hữu ích khác.

SCM Breeze sử dụng phím tắt và bí danh để làm việc với các tập tin git theo số:

Ctrl + x, c =>git_add_and_commit - thêm các tập tin nhất định (nếu có), sau đó cam kết tổ chức thay đổi

Ctrl +x, Space =>git_commit_all - cam kết tất cả mọi thứ

git add:

$ ga 1 

git diff:

$ gd 2 

git reset:

$ grs 3 

git commit:

$ gco 4 

cách Native với git add -i

git add -i 

Từ Git reference:

-i
--interactive
Add sửa đổi nội dung trong cây làm việc tương tác với các chỉ số . Các đối số đường dẫn tùy chọn có thể được cung cấp để giới hạn hoạt động cho một tập hợp con của cây đang hoạt động. Xem “Chế độ tương tác” để biết chi tiết.

Bạn có thể nhớ điều này là -i trực quan, vì giao diện thực sự trực quan. Vâng, ít nhất là người dùng Vim hardcore.

Mở chế độ tương tác: enter image description here

Thêm (dàn) một tập tin theo dõi: enter image description here

Thêm một tập tin untracked: enter image description here

Xem những thay đổi: enter image description here

Nếu bạn bị kẹt ở giữa việc thêm, h nó Trả lại bằng một chuỗi rỗng.

Lưu ý:

Nếu bạn đang nhầm lẫn với sự xuất hiện và màu: Tôi đã sử dụng iTerm2 + zsh + oh-my-zsh.

+0

Theo như tôi biết git -i chỉ cho phép thêm đường dẫn không được theo dõi vào sân khấu. Điều này cũng cho phép thêm tệp được cập nhật? Nếu không, làm cách nào để loại trừ chúng khỏi cam kết? –

+0

Tôi đã thêm một công cụ thực hiện chính xác những gì bạn muốn. –

+1

@PeterPaulKiefer: 'git add -i' làm mọi thứ mà' git add' có thể. Vì vậy, nó có thể thêm các tập tin cập nhật, và loại bỏ chúng. –

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