2009-12-10 39 views
85

Tôi đang cố chỉnh sửa thông báo cam kết cũ như được giải thích here.Thay đổi thông báo cam kết cũ trên Git

Vấn đề là bây giờ, khi tôi cố gắng chạy rebase -i HEAD~5 nó nói interactive rebase already started.

Vì vậy, sau đó tôi thử: git rebase --continue nhưng đã nhận lỗi này:

error: Ref refs/heads/master is at 7c1645b447a8ea86ee143dd08400710c419b945b but expected c7577b53d05c91026b9906b6d29c1cf44117d6ba 
fatal: Cannot lock the ref 'refs/heads/master'. 

Bất kỳ ý tưởng?

Trả lời

88

Nó nói:

When you save and exit the editor, it will rewind you back to that last commit in that list and drop you on the command line with the following message:

$ git rebase -i HEAD~3 
Stopped at 7482e0d... updated the gemspec to hopefully work better 
You can amend the commit now, with 

Nó không có nghĩa là:

type again git rebase -i HEAD~3

Cố gắng khônggit rebase -i HEAD~3 khi thoát khỏi trình biên tập, và nó sẽ hoạt động tốt.
(nếu không, trong tình huống cụ thể của bạn, một git rebase -i --abort thể là cần thiết để thiết lập lại tất cả mọi thứ và cho phép bạn thử lại)


Như Dave Vogt đề cập trong các ý kiến, git rebase --continue là cho đi với nhiệm vụ tiếp theo trong rebasing quy trình, sau khi bạn đã sửa đổi cam kết đầu tiên.

Ngoài ra, Gregg Lind đề cập trong his answer lệnh reword của git rebase:

By replacing the command "pick" with the command "edit", you can tell git rebase to stop after applying that commit, so that you can edit the files and/or the commit message, amend the commit, and continue rebasing.

If you just want to edit the commit message for a commit, replace the command " pick " with the command " reword ", since Git1.6.6 (January 2010) .

It does the same thing ‘ edit ’ does during an interactive rebase, except it only lets you edit the commit message without returning control to the shell. This is extremely useful.
Currently if you want to clean up your commit messages you have to:

$ git rebase -i next 

Then set all the commits to ‘edit’. Then on each one:

# Change the message in your editor. 
$ git commit --amend 
$ git rebase --continue 

Using ‘ reword ’ instead of ‘ edit ’ lets you skip the git-commit and git-rebase calls.

+1

Làm việc với lệnh --abort. Cảm ơn –

+2

Ngoài ra, 'git rebase --continue' sẽ chuyển sang tác vụ tiếp theo trong quá trình rebasing, sau khi bạn đã sửa đổi cam kết đầu tiên. –

+0

Thêm [link] (https://help.github.com/articles/changing-a-commit-message/) vào bài viết wiki github để thay đổi thông báo cam kết – Joy

42

FWIW, git rebase tương tác hiện nay đã là "xây dựng lại và" tùy chọn, làm cho chất nhầy này h ít đau đớn hơn!

9

Bạn có thể làm theo cách sau này như @gregg nói sử dụng từ xây dựng lại và

git rebase -i HEAD~n 

đây n là danh sách của n cuối cùng cam kết.

Ví dụ, nếu bạn sử dụng git rebase -i HEAD~4

pick e459d80 Do xyz 
pick 0459045 Do something 
pick 90fdeab Do blah blah blah 
pick 90fdeab Do pqr 

Bây giờ thay thế từ chọn với xây dựng lại và cho cam bạn muốn chỉnh sửa tin nhắn.

pick e459d80 Do xyz 
    reword 0459045 Do something 
    reword 90fdeab Do blah blah blah 
    pick 90fdeab Do pqr 

Bây giờ gần gũi và tiết kiệm này, bạn sẽ nhận được cơ hội để sửa cam kết thông báo mà bạn đã sử dụng xây dựng lại và trong cửa sổ tiếp theo.

Bạn có thể tham chiếu tài liệu chính thức here cũng như

+0

Đây thực sự là cách đơn giản nhất để thực hiện việc này. Làm việc như một say mê nhờ :) –

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