Chỉnh sửa thông báo cam kết trong SourceTree Windows (đã được đẩy lên từ xa)


202

Làm cách nào để chỉnh sửa thông báo cam kết không chính xác trong SourceTree mà không cần chạm vào dòng lệnh?

Chi tiết bổ sung:

  • Đây không phải là cam kết mới nhất.
  • Mọi thứ đã được đẩy lên Bitbucket.
  • Đây là một kho lưu trữ riêng tư và tôi là cộng tác viên duy nhất.
  • Tôi không ngại mất bất kỳ cam kết nào trước đây, vì tôi có thể tái cam kết chúng bất cứ lúc nào.
  • Tuy nhiên, tôi không muốn mất bất kỳ sửa đổi mã nào.

Kết quả:

  • Vì dường như không thể vào lúc này theo nhận xét và trả lời của bạn, tôi sẽ tạo một kho lưu trữ mới và bắt đầu lại tất cả. Cảm ơn tất cả vì sự giúp đỡ của bạn!

Câu trả lời:


425

Dưới đây là các bước để chỉnh sửa thông báo cam kết của một cam kết trước đó ( không phải là cam kết gần đây nhất ) bằng SourceTree cho Windows phiên bản 1.5.2.0 :

Bước 1

Chọn cam kết ngay trước khi cam kết mà bạn muốn chỉnh sửa. Ví dụ: nếu tôi muốn chỉnh sửa cam kết với thông báo "FOOebar!" sau đó tôi cần chọn cam kết xuất hiện ngay trước nó:

Chọn cam kết trước cái mà tôi muốn chỉnh sửa.

Bước 2

Nhấp chuột phải vào cam kết đã chọn và nhấp Rebase children...interactively:

Chọn "Rebase children tương tác".

Bước 3

Chọn cam kết mà bạn muốn chỉnh sửa, sau đó nhấp vào Edit Messageở dưới cùng. Trong trường hợp này, tôi đang chọn cam kết với thông báo "FOOebar!":

Chọn cam kết mà bạn muốn chỉnh sửa.

Bước 4

Chỉnh sửa thông điệp cam kết, và sau đó nhấp vào OK. Trong ví dụ của tôi, tôi đã thêm "SHAZBOT! SKADOOSH!"

Chỉnh sửa thông điệp cam kết

Bước 5

Khi bạn quay lại cửa sổ rebase tương tác, bấm vào OKđể hoàn thành rebase:

Nhấn OK để hoàn thành.

Bước 6

Tại thời điểm này, bạn sẽ cần phải thúc đẩy các thay đổi mới của mình kể từ khi bạn đã từ chối các cam kết mà bạn đã thúc đẩy. Tuy nhiên, phiên bản SourceTree cho Windows 1.5.2.0 hiện tại không cho phép bạn đẩy mạnh qua GUI, vì vậy bạn sẽ cần sử dụng Git từ bất kỳ dòng lệnh nào để thực hiện điều đó.

Nhấp vào Terminaltừ GUI để mở thiết bị đầu cuối.

Nhấp vào thiết bị đầu cuối

Bước 7

Từ lực đẩy thiết bị đầu cuối với lệnh sau,

git push origin <branch> -f

đâu <branch>là tên của nhánh mà bạn muốn đẩy, và -fcó nghĩa là buộc lực đẩy. Lực đẩy sẽ ghi đè lên các cam kết của bạn trên repo từ xa, nhưng trong trường hợp của bạn thì không sao vì bạn nói rằng bạn không chia sẻ repo của mình với người khác.

Đó là nó! Bạn đã hoàn tất!


4
Các bước cơ bản giống nhau trên phiên bản Mac.
racing_carr

2
Chú ý: Nếu bạn muốn bắt đầu tin nhắn cam kết của mình với # điều này sẽ không hoạt động, git coi nó như một bình luận và cho bạn biết tin nhắn cam kết của bạn trống!
Daniel Edholm Ignat

1
"Thế là xong! Bạn đã hoàn thành!" - Thật dễ dàng khi tôi không biết điều gì, như một con thỏ có thể bị bắt. Thay vì tạo tính năng chương trình, cho một tình huống quan trọng và thường thấy như vậy. Khi bạn vừa mắc lỗi đánh máy, bạn phải đặt lại đầu và tạo lại cam kết mới.
Rantiev

67
Hài hước - Tôi tự hỏi tại sao họ không thực hiện tùy chọn "Chỉnh sửa thông điệp cam kết" đơn giản.
Jonathan Aquino

1
Force Push hiện có sẵn mặc dù GUI.
Mặt

43

Trên phiên bản 1.9.6.1. Đối với cam kết UnPushed.

  1. Nhấp vào mô tả đã cam kết trước đó
  2. Nhấp vào biểu tượng Cam kết
  3. Nhập thông báo cam kết mới và chọn " Sửa đổi cam kết mới nhất " từ menu thả xuống Tùy chọn cam kết.
  4. Cam kết thông điệp của bạn.

13

Nếu thông báo nhận xét bao gồm các ký tự không phải tiếng Anh , sử dụng phương thức do user456814 cung cấp, các ký tự đó sẽ được thay thế bằng dấu chấm hỏi. (được thử nghiệm theo sourcetree Ver2.5.5.0)

Vì vậy tôi phải sử dụng phương pháp sau.

THẬN TRỌNG : nếu cam kết đã bị kéo bởi các thành viên khác, những thay đổi bên dưới có thể gây ra sự hỗn loạn cho họ.

Bước 1 : Trong cửa sổ chính sourcetree, xác định vị trí tab repo của bạn và nhấp vào nút " terminal " để mở bảng điều khiển lệnh git.

Bước 2 :

[Tình huống A] : cam kết mục tiêu là mới nhất.

1) Trong bảng điều khiển lệnh git, nhập liệu

git commit --amend -m "new comment message"

2) Nếu cam kết mục tiêu đã được đẩy đến từ xa, bạn phải đẩy lại bằng vũ lực. Trong bảng điều khiển lệnh git, nhập liệu

git push --force

[Tình huống B] : cam kết mục tiêu không phải là mục tiêu mới nhất.

1) Trong bảng điều khiển lệnh git, nhập liệu

git rebase -i HEAD~n

Nó là để squash n cam kết mới nhất . ví dụ: nếu bạn muốn chỉnh sửa tin nhắn trước tin nhắn cuối cùng, n là 2. Lệnh này sẽ mở một cửa sổ vi, từ đầu tiên của mỗi dòng là " pick " và bạn thay đổi "pick" thành " tua lại " cho dòng bạn muốn chỉnh sửa Sau đó, nhập :wqđể lưu và thoát khỏi cửa sổ vi. Bây giờ, một cửa sổ vi mới sẽ được mở, trong cửa sổ này bạn nhập tin nhắn mới của mình. Cũng sử dụng :wqđể lưu và thoát.

2) Nếu cam kết mục tiêu đã được đẩy đến từ xa, bạn phải đẩy lại bằng vũ lực. Trong bảng điều khiển lệnh git, nhập liệu

git push --force


Cuối cùng : Trong cửa sổ chính sourcetree, Bấm F5để làm mới.


12

Cập nhật

Lưu ý: câu trả lời này ban đầu được viết liên quan đến các phiên bản cũ hơn của SourceTree cho Windows và hiện đã lỗi thời.

Xem câu trả lời mới của tôi cho phiên bản hiện tại của SourceTree cho Windows, 1.5.2.0 . Tôi để lại câu trả lời này cho mục đích lịch sử.

Câu trả lời gốc

vì tôi đang ở trên Windows Tôi không có công cụ dòng lệnh và tôi cũng không biết cách sử dụng một công cụ :( Đây có phải là cách duy nhất để sắp xếp nó ra không? GUI không bao gồm tất cả các chức năng của git? - Poster gốc

Về GUI Git, không, chúng không bao gồm tất cả các chức năng của Git . Họ thậm chí không đến gần . Tôi đề nghị bạn kiểm tra một trong những câu trả lời trong Làm cách nào để chỉnh sửa thông báo cam kết không chính xác trong Git? , Git đủ linh hoạt để có nhiều giải pháp ... từ dòng lệnh.

SourceTree thực sự có thể đi kèm với shell bash msysgit hoặc nó có thể sử dụng shell lệnh Windows tiêu chuẩn. Dù bằng cách nào, bạn mở nó lên dưới dạng SourceTree bằng cách nhấp vào nút Terminal:

nhập mô tả hình ảnh ở đây

Bạn đặt thiết bị đầu cuối SourceTree sử dụng (bash hoặc Windows) tại đây:

nhập mô tả hình ảnh ở đây

Một cách để giải quyết vấn đề trong SourceTree

Điều đó đang được nói, đây là một cách bạn có thể làm điều đó trong SourceTree. Vì bạn đã đề cập trong các nhận xét rằng bạn không bận tâm "quay lại cam kết bị lỗi" (theo đó tôi giả sử bạn thực sự có nghĩa là đặt lại, đó là một hoạt động khác trong Git), nên đây là các bước:

  1. Thực hiện thiết lập lại cứng trong SourceTree cho cam kết xấu bằng cách nhấp chuột phải vào nó và chọn Reset current branch to this commitvà chọn tùy chọn đặt lại cứng từ trình đơn thả xuống.nhập mô tả hình ảnh ở đây
  2. Nhấp vào nút Cam kết, sau đó
  3. Nhấp vào hộp kiểm ở phía dưới có nội dung "Sửa đổi cam kết mới nhất". nhập mô tả hình ảnh ở đây
  4. Thực hiện các thay đổi bạn muốn gửi tin nhắn, sau đó nhấp vào Cam kết một lần nữa. Voila!

Về nhận xét này :

nếu điều đó là không thể bởi vì nó đã được đẩy lên Bitbucket, tôi sẽ không phiền khi tạo một kho lưu trữ mới và bắt đầu lại.

Điều này có nghĩa là bạn là người duy nhất làm việc trên repo? Điều này rất quan trọng vì việc thay đổi lịch sử của một repo (như sửa đổi một cam kết) không phải là chuyện nhỏ mà không gây ra vấn đề gì cho các cộng tác viên của bạn. Tuy nhiên, giả sử rằng bạn là người duy nhất làm việc trên repo, thì điều tiếp theo bạn muốn làm là buộc đẩy lịch sử đã thay đổi của bạn lên điều khiển từ xa.

Mặc dù vậy, hãy lưu ý rằng vì bạn đã thiết lập lại cứng cho cam kết bị lỗi, sau đó ép buộc khiến bạn mất tất cả công việc xảy ra sau đó. Nếu không sao, thì bạn có thể cần sử dụng lệnh sau tại dòng lệnh để thực hiện lực đẩy, bởi vì tôi không thể tìm thấy tùy chọn để thực hiện điều đó trong SourceTree:

git push remote-repo head -f

Điều này cũng giả định rằng BitBucket sẽ cho phép bạn buộc đẩy sang repo.

Bạn thực sự nên học cách sử dụng Git từ dù sao dòng lệnh, nó sẽ giúp bạn thành thạo hơn về Git. #ProTip, sử dụng msysgit và bật chế độ Chỉnh sửa nhanh trong thuộc tính của thiết bị đầu cuối, để bạn có thể nhấp đúp để tô sáng một dòng văn bản, nhấp chuột phải để sao chép và nhấp chuột phải lần nữa để dán. Nó khá nhanh.

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.