it-swarm-vi.com

Làm thế nào để sửa đổi các thông điệp cam kết hiện có, chưa được đánh dấu?

Tôi đã viết điều sai trong một thông điệp cam kết.

Làm thế nào tôi có thể thay đổi tin nhắn? Các cam kết chưa được đẩy.

7673
Laurie Young

Sửa đổi tin nhắn cam kết gần đây nhất

git commit --amend

sẽ mở trình soạn thảo của bạn, cho phép bạn thay đổi thông báo cam kết của lần xác nhận gần đây nhất. Ngoài ra, bạn có thể đặt thông báo cam kết trực tiếp trong dòng lệnh với:

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

Tuy nhiên, điều này có thể làm cho các thông điệp cam kết nhiều dòng hoặc chỉnh sửa nhỏ trở nên cồng kềnh hơn để nhập.

Hãy chắc chắn rằng bạn không có bất kỳ thay đổi bản sao làm việc nào dàn dựng trước khi thực hiện việc này nếu không chúng cũng sẽ được cam kết. (Không thay đổi thay đổi sẽ không được cam kết.)

Thay đổi thông báo của một cam kết mà bạn đã đẩy đến chi nhánh từ xa của mình

Nếu bạn đã đẩy cam kết của mình lên chi nhánh từ xa, thì bạn sẽ cần buộc Đẩy cam kết với:

git Push <remote> <branch> --force
# Or
git Push <remote> <branch> -f

Cảnh báo: lực đẩy sẽ ghi đè lên nhánh từ xa với trạng thái của địa phương của bạn. Nếu có các cam kết trên nhánh từ xa mà bạn không có trong nhánh cục bộ của mình, bạn will sẽ mất các cam kết đó.

Cảnh báo: thận trọng về việc sửa đổi các cam kết mà bạn đã chia sẻ với người khác. Sửa đổi các cam kết về cơ bản viết lại chúng có các SHA ID khác nhau) gây ra vấn đề nếu người khác có bản sao của cam kết cũ mà bạn đã viết lại. Bất kỳ ai có bản sao của cam kết cũ sẽ cần phải đồng bộ hóa công việc của họ với cam kết mới được viết lại, đôi khi có thể khó khăn, vì vậy hãy đảm bảo bạn phối hợp với người khác khi cố gắng viết lại chia sẻ lịch sử cam kết hoặc chỉ cần tránh viết lại các cam kết được chia sẻ hoàn toàn.


Sử dụng rebase tương tác

Một lựa chọn khác là sử dụng rebase tương tác.
[.__.] Điều này cho phép bạn chỉnh sửa bất kỳ tin nhắn nào bạn muốn cập nhật ngay cả khi đó không phải là tin nhắn mới nhất.

Để thực hiện một git squash, hãy làm theo các bước sau:

// X is the number of commits to the last commit you want to be able to edit
git rebase -i HEAD~X

Khi bạn xóa các cam kết của mình - chọn e/r để chỉnh sửa tin nhắn

enter image description here

Lưu ý quan trọng về rebase tương tác

Khi bạn sử dụng git rebase -i HEAD~X, có thể có nhiều hơn hơn là X cam kết. Git sẽ "thu thập" tất cả các cam kết trong các cam kết X cuối cùng và nếu có sự hợp nhất ở đâu đó trong phạm vi đó, bạn sẽ thấy tất cả các cam kết cũng vì vậy kết quả sẽ là X +.

Mẹo tốt:

Nếu bạn phải làm điều đó cho nhiều hơn một chi nhánh và bạn có thể phải đối mặt với xung đột khi sửa đổi nội dung, hãy thiết lập git rerere và để git tự động giải quyết các xung đột đó cho bạn.


Tài liệu

15296
EfForEffort
git commit --amend -m "your new message"
2458
lfx_cool

Nếu cam kết bạn muốn sửa thì không phải là cam kết gần đây nhất:

  1. git rebase --interactive $parent_of_flawed_commit

    Nếu bạn muốn sửa một số cam kết thiếu sót, hãy vượt qua cha mẹ của người già nhất trong số họ.

  2. Một biên tập viên sẽ đưa ra, với một danh sách tất cả các cam kết kể từ khi bạn đưa ra.

    1. Thay đổi pick thành reword (hoặc trên các phiên bản cũ của Git, thành edit) trước bất kỳ cam kết nào bạn muốn sửa.
    2. Khi bạn lưu, Git sẽ phát lại các cam kết được liệt kê.

  3. Đối với mỗi cam kết bạn muốn tua lại , Git sẽ đưa bạn trở lại trình chỉnh sửa của mình. Đối với mỗi cam kết bạn muốn chỉnh sửa , Git thả bạn vào Shell. Nếu bạn là người trong Shell:

    1. Thay đổi cam kết theo bất kỳ cách nào bạn muốn.
    2. git commit --amend
    3. git rebase --continue

Hầu hết các chuỗi này sẽ được giải thích cho bạn bằng đầu ra của các lệnh khác nhau khi bạn đi. Nó rất dễ dàng, bạn không cần phải ghi nhớ nó - chỉ cần nhớ rằng git rebase --interactive cho phép bạn sửa lỗi cho dù chúng đã tồn tại bao lâu.


Lưu ý rằng bạn sẽ không muốn thay đổi các cam kết mà bạn đã đẩy. Hoặc có thể bạn làm, nhưng trong trường hợp đó, bạn sẽ phải hết sức cẩn thận để liên lạc với tất cả những người có thể đã thực hiện cam kết của bạn và thực hiện công việc trên đầu trang của họ. Làm cách nào để khôi phục/đồng bộ hóa lại sau khi ai đó đẩy rebase hoặc đặt lại vào nhánh được xuất bản?

2330
Aristotle Pagaltzis

Để sửa đổi cam kết trước đó, hãy thực hiện các thay đổi bạn muốn và thực hiện các thay đổi đó, rồi chạy

git commit --amend

Điều này sẽ mở một tệp trong trình soạn thảo văn bản của bạn đại diện cho thông điệp cam kết mới của bạn. Nó bắt đầu được điền với văn bản từ tin nhắn cam kết cũ của bạn. Thay đổi thông điệp cam kết như bạn muốn, sau đó lưu tệp và thoát trình chỉnh sửa của bạn để hoàn tất.

Để sửa đổi cam kết trước đó và giữ cùng một thông điệp tường trình, hãy chạy

git commit --amend -C HEAD

Để sửa lỗi cam kết trước đó bằng cách xóa hoàn toàn, hãy chạy

git reset --hard HEAD^

Nếu bạn muốn chỉnh sửa nhiều hơn một tin nhắn cam kết, hãy chạy

git rebase -i HEAD~commit_count

(Thay thế cam kết với số lượng xác nhận mà bạn muốn chỉnh sửa.) Lệnh này khởi chạy trình soạn thảo của bạn. Đánh dấu cam kết đầu tiên (cam kết mà bạn muốn thay đổi) là bản chỉnh sửa của Cameron thay vì chọn Pick, sau đó lưu và thoát trình soạn thảo của bạn. Thực hiện thay đổi bạn muốn cam kết và sau đó chạy

git commit --amend
git rebase --continue

Lưu ý: Bạn cũng có thể "Thực hiện thay đổi bạn muốn" từ trình chỉnh sửa được mở bởi git commit --amend

762
Fatih

Như đã đề cập, git commit --amend là cách ghi đè lên cam kết cuối cùng. Một lưu ý: nếu bạn cũng muốn ghi đè lên các tệp , lệnh sẽ là

git commit -a --amend -m "My new commit message"
392
John

Bạn cũng có thể sử dụng git filter-branch cho việc đó.

git filter-branch -f --msg-filter "sed 's/errror/error/'" $flawed_commit..HEAD

Nó không dễ như một git commit --amend tầm thường, nhưng nó đặc biệt hữu ích, nếu bạn đã có một số kết hợp sau thông báo cam kết sai lầm của bạn.

Lưu ý rằng điều này sẽ cố gắng viết lại MỌI cam kết giữa HEAD và cam kết thiếu sót, vì vậy bạn nên chọn lệnh msg-filter của mình thật khôn ngoan ;-)

352
Mark

Tôi thích cách này.

git commit --amend -c <commit ID>

Nếu không, sẽ có một cam kết mới với ID cam kết mới

312
krevedko

Nếu bạn đang sử dụng công cụ Git GUI, có một nút có tên là sửa đổi cam kết cuối cùng. Nhấp vào nút đó và sau đó nó sẽ hiển thị các tập tin và cam kết cuối cùng của bạn. Chỉ cần chỉnh sửa tin nhắn đó và bạn có thể cam kết với tin nhắn cam kết mới.

Hoặc sử dụng lệnh này từ bàn điều khiển/thiết bị đầu cuối:

git commit -a --amend -m "My new commit message"
310
Akhilraj N S

Bạn có thể sử dụng Git rebasing . Ví dụ: nếu bạn muốn sửa đổi trở lại để xác nhận bbc643cd, hãy chạy

$ git rebase bbc643cd^ --interactive

Trong trình chỉnh sửa mặc định, sửa đổi 'chọn' thành 'chỉnh sửa' trong dòng có cam kết bạn muốn sửa đổi. Thực hiện các thay đổi của bạn và sau đó thực hiện chúng với

$ git add <filepattern>

Bây giờ bạn có thể sử dụng

$ git commit --amend

để sửa đổi cam kết và sau đó

$ git rebase --continue

để trở lại cam kết đầu trước.

282
Shoaib Ud-Din
  1. Nếu bạn chỉ muốn sửa đổi thông điệp cam kết cuối cùng của mình, thì hãy làm:

    git commit --amend
    

    Điều đó sẽ thả bạn vào trình duyệt văn bản của bạn và cho phép bạn thay đổi thông báo cam kết cuối cùng.

  2. Nếu bạn muốn thay đổi 3 thông điệp cam kết gần nhất hoặc bất kỳ thông điệp cam kết nào cho đến thời điểm đó, hãy cung cấp HEAD~3 cho lệnh git rebase -i:

    git rebase -i HEAD~3
    
275
Heena Hussain

Nếu bạn phải thay đổi một thông báo cam kết cũ trên nhiều chi nhánh (nghĩa là, cam kết với thông báo lỗi có trong nhiều chi nhánh) bạn có thể muốn sử dụng:

git filter-branch -f --msg-filter \
'sed "s/<old message>/<new message>/g"' -- --all

Git sẽ tạo một thư mục tạm thời để viết lại và sao lưu thêm các tham chiếu cũ trong refs/original/.

  • -f sẽ thực thi thao tác. Điều này là cần thiết nếu thư mục tạm thời đã có hoặc nếu đã có tài liệu tham khảo được lưu trữ dưới refs/original. Nếu đó không phải là trường hợp, bạn có thể thả cờ này.

  • -- tách các tùy chọn nhánh bộ lọc khỏi các tùy chọn sửa đổi.

  • --all sẽ đảm bảo rằng tất cả các nhánh thẻ được viết lại.

Do sao lưu các tham chiếu cũ của bạn, bạn có thể dễ dàng quay lại trạng thái trước khi thực hiện lệnh.

Giả sử, bạn muốn khôi phục chủ của mình và truy cập vào nhánh old_master:

git checkout -b old_master refs/original/refs/heads/master
258
sebers

Sử dụng

git commit --amend

Để hiểu chi tiết, một bài viết xuất sắc là 4. Viết lại Lịch sử Git. Nó cũng nói về khi không sử dụng git commit --amend.

221
skin

Sửa đổi

Bạn có một vài lựa chọn ở đây. Bạn có thể làm

git commit --amend

miễn là đó là cam kết cuối cùng của bạn.

Rebase tương tác

Mặt khác, nếu đó không phải là cam kết cuối cùng của bạn, bạn có thể thực hiện một cuộc nổi loạn tương tác,

git rebase -i [branched_from] [hash before commit]

Sau đó, bên trong rebase tương tác, bạn chỉ cần thêm chỉnh sửa cho cam kết đó. Khi nó xuất hiện, hãy thực hiện git commit --amend và sửa đổi thông điệp cam kết. Nếu bạn muốn quay lại trước điểm cam kết đó, bạn cũng có thể sử dụng git reflog và chỉ cần xóa cam kết đó. Sau đó, bạn chỉ cần làm lại một git commit.

195
wallerjake

Nếu bạn đang sử dụng GUI Git, bạn có thể sửa đổi cam kết cuối cùng chưa được đẩy bằng:

Commit/Amend Last Commit
183
gulchrider

Nếu đó là cam kết cuối cùng của bạn, chỉ cần sửa đổi cam kết:

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

(sử dụng cờ -o (--only) để đảm bảo bạn chỉ thay đổi thông điệp cam kết)


[.__.] Nếu đó là một cam kết bị chôn vùi, hãy sử dụng rebase tương tác tuyệt vời :

git rebase -i @~9   # Show the last 9 commits in a text editor

Tìm cam kết bạn muốn, thay đổi pick thành r (reword), đồng thời lưu và đóng tệp. Làm xong!



Hướng dẫn thu nhỏ vim (hoặc, làm thế nào để rebase chỉ với 8 lần nhấn phím 3jcwrEscZZ):

  • Chạy vimtutor nếu bạn có thời gian
  • hjkl tương ứng với các phím di chuyển 
  • Tất cả các lệnh có thể được bắt đầu bằng "phạm vi", ví dụ: 3j di chuyển xuống 3 dòng
  • i để vào chế độ chèn - văn bản bạn nhập sẽ xuất hiện trong tệp
  • Esc hoặc là Ctrlc để thoát chế độ chèn và trở về chế độ "bình thường"
  • u trở lại
  • Ctrlr làm lại
  • dddwdl để xóa một dòng, Word hoặc chữ cái, tương ứng
  • cccwcl để thay đổi một dòng, Word hoặc chữ cái tương ứng (giống như ddi)
  • yyywyl để sao chép ("yank") một dòng, Word hoặc chữ cái, tương ứng
  • p hoặc là P để dán sau, hoặc trước vị trí hiện tại, tương ứng
  • :wEnter để lưu (ghi) một tập tin
  • :q!Enter bỏ mà không tiết kiệm
  • :wqEnter hoặc là ZZ để tiết kiệm và thoát

Nếu bạn chỉnh sửa văn bản nhiều, sau đó chuyển sang bố trí bàn phím Dvorak, tìm hiểu loại cảm ứng và tìm hiểu vim. Có đáng để nỗ lực không? Có.



ProTip ™: Đừng ngại thử nghiệm các lệnh "nguy hiểm" viết lại lịch sử * - Git không xóa các cam kết của bạn trong 90 ngày theo mặc định; bạn có thể tìm thấy chúng trong reflog:

$ git reset @~3   # go back 3 commits
$ git reflog
c4f708b [email protected]{0}: reset: moving to @~3
2c52489 [email protected]{1}: commit: more changes
4a5246d [email protected]{2}: commit: make important changes
e8571e4 [email protected]{3}: commit: make some changes
... earlier commits ...
$ git reset 2c52489
... and you're back where you started

* Xem ra các tùy chọn như --hard--force mặc dù - họ có thể loại bỏ dữ liệu.
[.__.] * Ngoài ra, đừng viết lại lịch sử trên bất kỳ chi nhánh nào bạn đang cộng tác.

172
Zaz

Tôi sử dụng Git GUI càng nhiều càng tốt, và điều đó cho bạn tùy chọn để sửa đổi cam kết cuối cùng:

Tick that box

Ngoài ra, git rebase -i Origin/master là một câu thần chú hay sẽ luôn mang đến cho bạn những cam kết bạn đã thực hiện trên đỉnh chính và cung cấp cho bạn tùy chọn để sửa đổi, xóa, sắp xếp lại hoặc squash. Không cần phải có được băm đó đầu tiên.

165
Havard Graff

Wow, vì vậy có rất nhiều cách để làm điều này.

Tuy nhiên, một cách khác để làm điều này là xóa cam kết cuối cùng, nhưng hãy giữ các thay đổi của nó để bạn không bị mất việc. Sau đó, bạn có thể thực hiện một cam kết khác với thông báo đã sửa. Điều này sẽ trông giống như thế này:

git reset --soft HEAD~1
git commit -m 'New and corrected commit message'

Tôi luôn luôn làm điều này nếu tôi quên thêm một tập tin hoặc thay đổi.

Ghi nhớ để chỉ định --soft thay vì --hard, nếu không bạn sẽ mất hoàn toàn cam kết đó.

135
Radu Murzea

Đối với bất kỳ ai đang tìm kiếm GUI Windows/Mac để giúp chỉnh sửa các tin nhắn cũ hơn (tức là không chỉ là tin nhắn mới nhất), tôi khuyên bạn nên SourceTree . Các bước để làm theo dưới đây.

SourceTree interactive rebase

Đối với các xác nhận chưa được đẩy đến một điều khiển từ xa:

  1. Đảm bảo bạn đã cam kết hoặc lưu lại tất cả các thay đổi hiện tại (nghĩa là không có tệp nào được liệt kê trong tab "Trạng thái tệp") - nó sẽ không hoạt động nếu không.
  2. Trong tab "Nhật ký/Lịch sử", nhấp chuột phải vào mục nhập có dòng liền kề trong biểu đồ một bên dưới cam kết bạn muốn chỉnh sửa và chọn "Rebase con của <commit ref > tương tác ... "
  3. Chọn toàn bộ hàng cho thông điệp cam kết bạn muốn thay đổi (tức là nhấp vào cột "Tin nhắn").
  4. Nhấp vào nút "Chỉnh sửa tin nhắn".
  5. Chỉnh sửa tin nhắn như mong muốn trong hộp thoại xuất hiện và sau đó nhấp vào OK.
  6. Lặp lại các bước 3-4 nếu có thông báo cam kết khác thay đổi.
  7. Nhấn OK: Rebasing sẽ bắt đầu. Nếu tất cả đều ổn, đầu ra sẽ kết thúc "Hoàn thành thành công".

... Hoặc ... đối với các cam kết đã được đẩy:

Thực hiện theo các bước trong câu trả lời này , tương tự như trên nhưng yêu cầu một lệnh tiếp theo được chạy từ dòng lệnh để buộc-Đẩy nhánh - đọc tất cả và áp dụng thận trọng cần thiết!

125
Steve Chambers

Nếu bạn chỉ muốn chỉnh sửa sử dụng cam kết mới nhất:

git commit --amend

hoặc là

git commit --amend -m 'one line message'

Nhưng nếu bạn muốn chỉnh sửa một số cam kết liên tiếp, bạn nên sử dụng rebasing thay thế:

git rebase -i <hash of one commit before the wrong commit>

git rebase editing

Trong một tệp như ở trên, hãy viết chỉnh sửa/e hoặc một trong các tùy chọn khác và nhấn lưu và thoát.

Bây giờ bạn sẽ ở cam kết sai đầu tiên. Thực hiện thay đổi trong các tệp và chúng sẽ được tự động dàn dựng cho bạn. Kiểu

git commit --amend

lưu và thoát khỏi đó và gõ

git rebase --continue 

để chuyển sang lựa chọn tiếp theo cho đến khi hoàn thành với tất cả các lựa chọn của bạn.

Lưu ý rằng những điều này thay đổi tất cả băm SHA của bạn sau lần cam kết cụ thể đó.

124
Shubham Chaudhary

Nếu bạn chỉ muốn thay đổi tin nhắn cuối cùng của mình, bạn nên sử dụng cờ --only hoặc phím tắt của nó -o với commit --amend:

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

Điều này đảm bảo rằng bạn không vô tình nâng cao cam kết của mình với các công cụ được dàn dựng. Tất nhiên, tốt nhất là có cấu hình $EDITOR thích hợp. Sau đó, bạn có thể bỏ tùy chọn -m và git sẽ điền trước thông điệp cam kết với thông báo cũ. Bằng cách này, nó có thể dễ dàng chỉnh sửa.

123
David Ongaro

Cập nhật tin nhắn cam kết sai cuối cùng của bạn với tin nhắn cam kết mới trong một dòng:

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

Hoặc, hãy thử thiết lập lại git như dưới đây:

# You can reset your head to n number of commit
# NOT a good idea for changing last commit message
# but you can get an idea to split commit into multiple commits
git reset --soft HEAD^

# it will reset you last commit. Now, you
# can re-commit it with new commit message.

Sử dụng thiết lập lại để phân chia các cam kết thành các cam kết nhỏ hơn

git reset cũng có thể giúp bạn chia một cam kết thành nhiều cam kết:

# reset your head. I am resetting to last commits:
git reset --soft HEAD^
# (you can reset multiple commit by doing HEAD~2(no. of commits)

# Now, reset your head for splitting it to multiple commits
git reset HEAD

# add and commit your files seperately to make multiple commits: e.g
git add app/
git commit -m "add all files in app directory"

git add config/
git commit -m "add all files in config directory"

Ở đây bạn đã phá vỡ thành công cam kết cuối cùng của bạn thành hai cam kết.

99
przbadu

Về câu hỏi này, có rất nhiều câu trả lời nhưng không ai trong số họ giải thích siêu chi tiết về cách thay đổi các thông điệp cam kết cũ hơn bằng VIM. Tôi đã bị mắc kẹt khi cố gắng tự làm điều này, vì vậy ở đây tôi sẽ viết chi tiết về cách tôi đã làm điều này đặc biệt đối với những người không có kinh nghiệm về VIM!

Tôi muốn thay đổi năm cam kết mới nhất của mình mà tôi đã đẩy lên máy chủ. Điều này khá 'nguy hiểm' vì nếu người khác đã rút từ điều này, bạn có thể làm mọi thứ rối tung lên bằng cách thay đổi các thông điệp cam kết. Tuy nhiên, khi bạn làm việc trên chi nhánh nhỏ của mình và chắc chắn không ai kéo nó, bạn có thể thay đổi nó như thế này:

Giả sử bạn muốn thay đổi năm cam kết mới nhất của mình, sau đó bạn nhập mã này vào thiết bị đầu cuối:

git rebase -i HEAD~5 * Trong đó 5 là số lượng tin nhắn cam kết bạn muốn thay đổi. (vì vậy nếu bạn muốn thay đổi lần thứ 10 thành lần cam kết cuối cùng, bạn nhập vào 10)

Lệnh này sẽ đưa bạn vào VIM ở đó bạn có thể ‘chỉnh sửa lịch sử cam kết của bạn. Bạn sẽ thấy 5 cam kết cuối cùng của mình ở đầu như thế này:

pick <commit hash> commit message

Thay vì pick bạn cần viết reword. Bạn có thể thực hiện việc này trong VIM bằng cách nhập i, điều này khiến bạn chuyển sang chế độ INSERT. (Bạn thấy rằng bạn ở chế độ chèn bởi Word INSERT ở phía dưới) Đối với các cam kết bạn muốn thay đổi loại trong reword thay vì pick

Sau đó, bạn cần lưu và thoát khỏi màn hình này, trước tiên bạn thực hiện điều đó bằng cách vào chế độ lệnh bằng cách nhấn nút esc. (bạn có thể kiểm tra xem bạn có ở chế độ lệnh hay không nếu Word INSERT ở dưới cùng biến mất) Sau đó, bạn có thể nhập lệnh bằng cách nhập :, lệnh lưu và thoát là wq. Vì vậy, nếu bạn nhập :wq bạn không thể theo dõi đúng.

Sau đó, VIM sẽ đi qua mọi thông điệp cam kết bạn muốn đặt lại, ở đây bạn thực sự có thể thay đổi các thông điệp cam kết. Bạn sẽ làm điều này bằng cách vào chế độ INSERT, thay đổi thông báo cam kết, chuyển sang chế độ lệnh và lưu và thoát. Làm điều này 5 lần và bạn đã thoát khỏi VIM!

Sau đó, nếu bạn đã đẩy các cam kết sai của mình, bạn cần phải git Push --force để ghi đè lên chúng. Hãy nhớ rằng git Push --force là một điều khá nguy hiểm để làm, vì vậy hãy chắc chắn rằng không có ai rút khỏi máy chủ kể từ khi bạn đẩy các cam kết sai của mình!

Bây giờ bạn đã thay đổi tin nhắn cam kết của bạn!

(Như bạn thấy tôi không có kinh nghiệm trong VIM vì vậy nếu tôi sử dụng sai 'biệt ngữ' để giải thích những gì đang xảy ra, vui lòng sửa tôi!)

82
Marijn

Bạn có thể sử dụng git-rebase-tuaord

Nó được thiết kế để chỉnh sửa bất kỳ cam kết nào (không chỉ cuối cùng) giống như commit --amend

$ git rebase-reword <commit-or-refname>

Nó được đặt tên theo hành động tương tác rebase để sửa đổi một cam kết: "tua lại". Xem bài đăng nàyngười đàn ông -section chế độ tương tác-

Ví dụ:

$ git rebase-reword b68f560
$ git rebase-reword HEAD^
76
albfan

Tôi đã thêm bí danh của reci, recm cho recommit (amend) nó, bây giờ tôi có thể làm điều đó với git recm hoặc git recm -m.

$ vim ~/.gitconfig

[alias]

    ......
    cm = commit
    reci = commit --amend
    recm = commit --amend
    ......
76
Chu-Siang Lai

Tôi nhận ra rằng tôi đã đẩy một cam kết với một lỗi đánh máy trong đó. Để hoàn tác, tôi đã làm như sau:

git commit --amend -m "T-1000, advanced prototype"
git Push --force

Cảnh báo: lực đẩy các thay đổi của bạn sẽ ghi đè lên nhánh từ xa bằng nhánh cục bộ của bạn. Hãy chắc chắn rằng bạn sẽ không ghi đè lên bất cứ thứ gì bạn muốn giữ. Ngoài ra, hãy thận trọng về việc buộc một cam kết sửa đổi (viết lại) nếu có ai khác chia sẻ chi nhánh với bạn, bởi vì họ sẽ cần phải viết lại lịch sử của chính họ nếu họ có bản sao cũ của cam kết mà bạn vừa viết lại.

54
neoneye

Tôi thích sử dụng như sau:

  1. git status
  2. git add --all
  3. git commit -am "message goes here about the change"
  4. git pull <Origin master>
  5. git Push <Origin master>
49
Kedar Adhikari

Nếu bạn chưa đẩy mã đến nhánh từ xa ( GitHub / Bitbucket ), bạn có thể thay đổi thông báo cam kết trên dòng lệnh như dưới đây.

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

Nếu bạn đang làm việc trên một chi nhánh cụ thể, hãy làm điều này:

git commit --amend -m "BRANCH-NAME: new message"

Nếu bạn đã đẩy mã với thông báo sai và bạn cần cẩn thận khi thay đổi tin nhắn. Đó là, sau khi bạn thay đổi thông điệp cam kết và thử đẩy nó một lần nữa, bạn sẽ gặp vấn đề. Để làm cho nó trơn tru, hãy làm theo các bước sau.

Vui lòng đọc toàn bộ câu trả lời của tôi trước khi thực hiện.

git commit --amend -m "BRANCH-NAME : your new message"

git Push -f Origin BRANCH-NAME                # Not a best practice. Read below why?

Lưu ý quan trọng: Khi bạn sử dụng lực Đẩy trực tiếp, bạn có thể gặp phải các vấn đề về mã mà các nhà phát triển khác đang làm việc trên cùng một nhánh. Vì vậy, để tránh những xung đột đó, bạn cần kéo mã từ chi nhánh của mình trước khi thực hiện lực đẩy :

 git commit --amend -m "BRANCH-NAME : your new message"
 git pull Origin BRANCH-NAME
 git Push -f Origin BRANCH-NAME

Đây là cách thực hành tốt nhất khi thay đổi thông điệp cam kết, nếu nó đã được đẩy.

43
Prabhakar