Chỉnh sửa tin nhắn cam kết git trong GitHub


173

Có cách nào chỉnh sửa trực tuyến thông điệp cam kết trong GitHub.com, sau khi gửi không?

Từ dòng lệnh, người ta có thể làm

git commit --amend -m "New commit message"

như được đề xuất chính xác trong một câu hỏi khác .

Cố gắng git pullvà sau đó git pushđã làm việc (mà không có bất kỳ cam kết nào khác đã can thiệp vào thời gian trung bình).

Nhưng nó có thể được thực hiện thông qua GitHubtrang web?


Vui lòng xem câu trả lời của @ DanGreen-ERICciger mặc dù đó không phải là câu trả lời được chấp nhận.
RBT

Câu trả lời:


101

Không, điều này là không thể trực tiếp. Giá trị băm cho mỗi cam kết Git cũng được tính dựa trên thông báo cam kết. Khi bạn thay đổi thông điệp cam kết, bạn thay đổi hàm băm. Nếu bạn muốn đẩy cam kết đó, bạn phải buộc lực đẩy đó (git đẩy -f). Nhưng nếu đã có ai đó thực hiện cam kết cũ của bạn và bắt đầu một công việc dựa trên cam kết đó, anh ta sẽ phải từ chối công việc của mình đối với cam kết mới của bạn.


Tôi cũng có thể thực hiện git pull và sau đó git đẩy và nó đã hoạt động. Nhưng rõ ràng là không có cách trực tuyến.
PNS

Vẫn không thể thực hiện kể từ ngày 5 tháng 4 năm 2016
bigT

Và tôi đoán nó sẽ không được ưu tiên cao, vì bạn sẽ thay đổi lịch sử cam kết của một chi nhánh đã được xuất bản, điều mà bạn không bao giờ nên làm (trừ khi bạn chắc chắn 200%, rằng không ai khác có chi nhánh này trên máy cục bộ của mình).
dunni

Điều này chỉ đúng một nửa. Đó là sự thật, nhưng chỉ với các giả định. Câu trả lời sẽ tốt hơn nếu được kết hợp với câu trả lời từ @DanGreen (bên dưới). Nó không "trực tiếp có thể", và chắc chắn nó đi kèm với lời cảnh báo (nghĩa là: "bạn nên 'không bao giờ' làm điều này ... [trừ khi bạn chắc chắn rằng bạn muốn]") - nhưng chỉ cần nói điều này là không có thể, khi về mặt kỹ thuật là có thể, là một câu trả lời không đầy đủ.
Bane

1
OP đã hỏi, nếu có thể thực hiện trực tuyến trên trang web Github. AFAIK điều này vẫn không thể. Vì vậy, câu trả lời của tôi là hợp lệ và câu trả lời của Dan Green chỉ xử lý cách thực hiện tại địa phương, không phải trên trang web của Github.
dunni

145

Hướng dẫn của GitHub để làm điều này:

  1. Trên dòng lệnh, điều hướng đến kho lưu trữ chứa cam kết bạn muốn sửa đổi.
  2. git commit --amendvà nhấn Enter.
  3. Trong trình soạn thảo văn bản của bạn, chỉnh sửa thông điệp cam kết và lưu cam kết.
  4. Sử dụng git push --force example-branchlệnh để buộc đẩy qua cam kết cũ.

Nguồn: https://help.github.com/articles/changing-a-commit-message/


11
HÃY CẨN THẬN! Sự khác biệt giữa việc sử dụng <git commit --amend> & <Enter> và <git commit --amend -m "tin nhắn cam kết mới">, là trong trường hợp đầu tiên bạn đang chỉnh sửa tin nhắn cam kết của mình trong trình soạn thảo văn bản & trong lần thứ 2, bạn thay thế nó bằng "thông điệp cam kết mới". Nếu bạn buộc lực đẩy này sẽ thay thế cam kết trên điều khiển từ xa của bạn. Điều này KHÔNG giải quyết được vấn đề là nếu những người khác trong nhóm của bạn đã thực hiện cam kết trước đó thì bây giờ bạn có lịch sử khác nhau (bao gồm các cam kết khác nhau) trên các máy khác nhau. Nếu bạn biết không ai rút được cam kết của bạn thì điều này là an toàn. Đọc nguồn Dan posted
Tmin

7
git commit --amendđã luôn tồn tại Ngoài ra, bạn đang bị lẫn lộn giữa git (một công cụ dòng lệnh nguồn mở) và Github (một công ty cung cấp dịch vụ lưu trữ nguồn trực tuyến).
vinyll

1
OP đã hỏi về GitHub và cụ thể là sau khi cam kết đã được đẩy đến máy chủ của họ. Đó là những hướng dẫn của GitHub để thực hiện những gì OP yêu cầu.
Dan Green-ERICciger

3
@ DanGreen-ERICciger - vâng, nhưng điều này không được thực hiện trên chính trang web, nó được thực hiện bằng cách sử dụng dòng lệnh. Tôi nghĩ PNS muốn làm điều đó từ trong giao diện web.
PhistucK

2
OP đã hỏi cách thực hiện với GitHub một cách cụ thể, đây là cách thực hiện với GitHub một cách cụ thể.
Dan Green-ERICciger

30

Bạn cần phải git push -fgiả định rằng không ai đã rút các cam kết khác trước đó. Coi chừng, bạn đang thay đổi lịch sử.


3

Không, bởi vì thông điệp cam kết có liên quan đến SHA / hash cam kết và nếu chúng ta thay đổi nó, SHA cam kết cũng bị thay đổi. Cách tôi sử dụng là tạo một nhận xét về cam kết đó. Tôi không thể nghĩ theo cách khác.


2

Đối với người dùng intellij: Nếu bạn muốn thực hiện thay đổi theo cách tương tác cho các cam kết trong quá khứ, không được đẩy theo các bước dưới đây trong Intellij :

  • Chọn Kiểm soát phiên bản
  • Chọn Nhật ký
  • Nhấp chuột phải vào cam kết mà bạn muốn sửa đổi nhận xét
  • Nhấp vào tua lại
  • Làm xong

Hy vọng nó giúp


0

Tôi đã phải đối mặt với cùng một vấn đề.

Xem trong github của bạn cho một chi nhánh cụ thể và bạn sẽ biết id xác nhận của cam kết đầu tiên trong chi nhánh đó. làm một cuộc nổi loạn đến đó:

git rebase -i

biên tập viên sẽ mở ra. Thực hiện theo dõi các cam kết của bạn từ github UI và mở trình chỉnh sửa và thay đổi các tin nhắ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.