2012-04-19 22 views
5

Tôi đã viết cam kết vào một tệp từ gitk bằng cách nhấp chuột phải vào cam kết và chọn "Viết cam kết vào tệp".Tôi làm cách nào để đảo ngược "Ghi cam kết tệp" của gitk?

Làm cách nào để áp dụng cam kết từ tệp này? Tôi có thể làm git apply, git addgit commit kết hợp, nhưng không phải là có một lệnh một bước để chỉ lấy đầu ra (với thông điệp cam kết và siêu dữ liệu) và cam kết nó như nó được?

+1

Điều này rất kém - sử dụng cùng một thuật ngữ như git. Tôi không hiểu ý của bạn bằng cách 'viết cam kết vào một tập tin' và tôi duy trì git-gui. Bạn có cam kết thay đổi tệp và sau đó tạo bản vá không? Các chi tiết quan trọng nếu bạn mong nhận được sự trợ giúp hữu ích. Bản vá được tạo ra như thế nào - * chính xác *. Như bạn đã lưu ý, git áp dụng và git am chấp nhận các tệp định dạng khác nhau - một dự kiến ​​các bản vá, các email khác có bản vá nội tuyến và thông tin cam kết. Tôi nghi ngờ câu trả lời dưới đây thực sự là chính xác. – patthoyts

+2

@patthoyts Làm cách nào khác để mô tả cách nhấp vào nút "Viết cam kết vào tệp"? –

+0

Có vẻ như có tùy chọn "write commit to file" trong 'gitk', nó sẽ trả về một hộp thoại thực hiện lệnh' git diff-tree --stdin -p --pretty'. 'git am' dường như không hiểu định dạng này. 'git apply' chỉ áp dụng cho các diff, tức là nó sẽ không tạo đối tượng commit. –

Trả lời

2

Tôi đang sử dụng Linux, nhưng tôi nghĩ tôi thấy những gì bạn đang nói đến. Trong gitk có tùy chọn "Ghi cam kết tệp" khi nhấp chuột phải vào một cam kết, sẽ trả về một hộp thoại thực hiện lệnh git diff-tree --stdin -p --pretty theo mặc định.

git apply chỉ dành cho việc áp dụng các khác biệt, tức là nó sẽ không tạo đối tượng cam kết để không được sử dụng. git am phải là công cụ chính xác để thực hiện thao tác này vì nó tạo ra các đối tượng cam kết. Tuy nhiên, nó không hiểu được định dạng đầu ra của lệnh trên, và tạo ra lỗi bạn đang thấy.

Tùy chọn dễ nhất có thể là tạo bản vá sử dụng định dạng git am hiểu cách sử dụng git format-patch thay vì git diff-tree. Có thể có cách để ép buộc git am vào việc hiểu định dạng git diff-tree, nhưng tôi không làm nhiều bản vá để không nhận thức được điều đó một cách dễ dàng.

0

git am có thể làm những gì bạn đang tìm kiếm. Phải mất các bản vá lỗi được tạo bởi git format-patch làm đầu vào. Tôi không biết những gì git-gui được nhổ ra.

+0

"Phát hiện định dạng bản vá không thành công". Loại kỳ lạ kể từ khi tôi chỉ tạo ra các tập tin với cùng một git trên cùng một máy trên cùng một repo. –

+0

Làm thế nào điều này nghĩa vụ phải làm việc? Trang hướng dẫn sử dụng nói về một hộp thư như một tham số, điều này dường như chỉ ra rằng đây không phải là lệnh đúng. –

+1

Sau khi thực hiện một số thao tác đào, lệnh thực sự mong đợi định dạng hộp thư chứ không phải bản vá. –

2

Không ai dường như đã cung cấp một câu trả lời thực tế cho câu hỏi, vì vậy đây là những gì tôi tìm thấy từ https://github.com/sinsunsan/archiref_wiki/wiki/Git-howto

patch -p1 < patch-file 

này có các tập tin vá lỗi được tạo ra bởi 'Viết cam kết nộp', nói với nó để bỏ qua cấp độ đầu tiên của đường dẫn (-p1) tức là a /, b/trong tệp và áp dụng cho các tệp hiện tại trên đĩa. Kết quả là sau đó trong cây làm việc của bạn, và có thể được cam kết như một cam kết mới:

git commit -am'Commit message here please.' 
Các vấn đề liên quan