您可以以编程方式仅编辑最后一次提交消息:
git commit --amend -m 'xxxxxxx'
Run Code Online (Sandbox Code Playgroud)
或者以交互方式随机提交:
git rebase -i HEAD~n
# Vim opens up, select the commit you want to modify, and change the word "pick" for "edit"
git commit --amend -m "Changing an old commit message!"
git rebase --continue
Run Code Online (Sandbox Code Playgroud)
我如何结合两者?我想以编程方式更改消息,但是先前提交,而不仅仅是最后一次.
我想要修改的提交已经被推送到git服务器,但让其他人重新同步git项目并不是一个问题.
我刚刚推送了一个提交,然后意识到我需要更改提交消息。
所以在我的本地仓库中,我做了:
git commit --amend -m "New commit message"
Run Code Online (Sandbox Code Playgroud)
但是当我尝试推送这个时,我收到了大量错误消息说
Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull') and try again
Run Code Online (Sandbox Code Playgroud)
这是修改我的信息的错误方式吗?最后,我不得不重置我所有的 repos,然后用一条新消息再次提交。
所以我的问题是,修改已推送内容的提交消息的正确方法是什么?
我有一个包含各种提交的存储库,我想将其合并为两个补丁。一个补丁介绍了该功能,另一个补丁则更改了现有代码以使用该功能。问题是,当我编码和提交时,我并没有考虑到这一点,所以有些提交同时完成了这两件事。我如何拆分这些提交?
我知道我可以使用 git rebase -i 并为我想要更改的每个提交选择编辑来完成此操作,但这样我只能更改提交消息,而不能更改代码
通常我想编辑提交消息,而不必重新选择上次提交的文件集.
git commit file1.c file2.c
Run Code Online (Sandbox Code Playgroud)
提交消息中的意外错误.
git commit file1.c file2.c --amend
Run Code Online (Sandbox Code Playgroud)
这是有效的,但我不想重新选择原始提交中的文件集,我曾经偶然做过git commit -a --amend并无意中添加了许多更改.
我知道git rebase -i HEAD~1然后替换pick为r(重新单词),但这最终只是几个步骤.
有没有办法在不包含任何新文件的情况下一步重写最后一次提交?
我愿意纠正我对此的理解,但我不确定为什么会发生这种情况。
使用 git 时,我知道如果我对文件进行更改然后提交它,我会得到一个新的哈希值,因为文件已更改。
我的理解git commit --amend是我可以对最后一次提交进行更改。
现在我可以理解,如果我更改提交消息,哈希值也会更改。
但是当我不做任何更改而只是保存并退出编辑器时(我可能已经改变了需要更改的想法)为什么哈希会更改?我所有的文件和一切都是一样的,但我已经保存了它。当git log提交的时间没有改变时,它只是在日志中出现两次,同时,相同的消息,相同的文件,除了不同的提交哈希。
如果没有做任何改动,为什么它会改变?
假设我的存储库中有以下历史记录:
E--F
/
A--B--C---D
Run Code Online (Sandbox Code Playgroud)
我想将其修改为:
E--F
/ \
A--B--C---D
Run Code Online (Sandbox Code Playgroud)
我不想修改修订的文件内容,我只想“绘制一个合并箭头”。我怎样才能做到这一点?
我尝试通过以下命令执行此操作:
git checkout D
git merge F -s ours --no-ff --no-commit
git commit --amend
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误消息:
fatal: You are in the middle of a merge -- cannot amend.
Run Code Online (Sandbox Code Playgroud)
我想保持提交信息不变(作者,日期,消息)。我唯一要更改的是将伪merge-info添加到提交中。
我使用git commit --amend修改了之前的提交.在那之后,当我推动我的更改时,由于'not -fast-forward'错误,我被拒绝了.我找到了答案.不幸的是,如命令,git pull --rebase,git fetech origin不工作.如果我的本地仓库没有冲突,为什么我的推送失败了.
我有一个小问题。在我们公司,我们达成了一项协议,即与错误跟踪器中的某些问题相关的所有提交都应以#<issue_number>(例如,#8956)开头。但是当使用编辑器编写消息时,git 会忽略所有以字母“#”开头的行。如果我使用的git commit -m '#<issue_number> <Message>'话是没有问题的。但我想修改提交并编辑它的消息而不使用-m标志。那么有没有办法让git#在使用编辑器编写提交消息时不忽略以开头的行呢?
当我使用mercurial command(hg commit --amend)时,它总是打开编辑器窗口.在git中我可以避免这种情况git commit -a --amend -CHEAD,是否有类似于mercurial的东西?
我需要在上次提交中添加一个共同作者,我尝试使用git commit --amend --author="name <name@email.com>"但更改--author为--co-authored-by. 我认为这将是一个很容易用 google 解决的问题,但一切都只适用于作者而不是合著者。
git ×10
git-amend ×10
git-commit ×3
commit ×1
git-commands ×1
git-rebase ×1
github ×1
hash ×1
mercurial ×1
merge ×1
push ×1
rebase ×1