Lar*_*ars 5 git commit-message push git-amend
我刚刚推送了一个提交,然后意识到我需要更改提交消息。
所以在我的本地仓库中,我做了:
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 commit --amend是用类似但已更改的提交“替换”先前的提交。你并没有真正改变原始提交。它仍然存在,但没有任何东西再引用它,除非有东西开始引用它,否则它最终将被垃圾收集。
这在本地完成时是透明的。但是,当您推送提交时,基本上为时已晚。您已经与其他人共享了该提交,这些人可能已经提取了该提交并基于该提交进行了工作。您不能用另一个提交替换该提交。
假设您进行了提交 A(在提交 B 之后):
B - A <- master
Run Code Online (Sandbox Code Playgroud)
然后你改变主意并修改 A,这实际上会创建一个新的提交 A'。当前分支将指向这个新提交。原始提交 A 仍然存在,但没有分支指向它
B - A
\
A' <- master
Run Code Online (Sandbox Code Playgroud)
如果你先推A
local remote
B - A <-master B - A <- origin/master
Run Code Online (Sandbox Code Playgroud)
然后修改,您将不被允许进行正常推送,因为该推送不会是快进合并
local remote
B - A B - A <- origin/master
\
A' <- master
Run Code Online (Sandbox Code Playgroud)
加剧问题:其他人可能已经使用了你的提交
local remote
B - A B - A - C <- origin/master
\
A' <- master
Run Code Online (Sandbox Code Playgroud)
你可以做你的修正,然后做一个强制推动git push -f。但这会给其他基于原始提交工作的开发人员带来问题。这与commit --amend变基(a有点像小型变基)存在相同的问题。有关进一步说明,请参阅Git Pro 书籍的“变基的危险”部分。
local remote
B - A B - A - C
\ \
A' <- master A' <- origin/master
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2560 次 |
| 最近记录: |