2012-03-08 60 views
3

我的环境:如何在github中更改我的1推的git消息?

我正在团队github私人存储库上工作。

我们只有主分支。

重现该问题:

  1. 我做了变化(我在谈论单身并且没有muilticase),并添加+承诺+推GitHub的私有库。

  2. 我在推送后在github中看到了消息 - 而且我错误地想改变它。

  3. 如何更改推送的消息?

编辑: 及其对我很重要,没有历史将留下我的错消息。

EDIT2: 已经将文件推他们在GitHub的仓库,而不是只在我的本地库

回答

7

TL; DR

git commit -v --amend 
git push -f 

这将允许你编辑最后一次提交消息,并用您的编辑替换遥控器上的提交。

无论其

你最有可能还不如干脆推着修正。

更改现有承诺的唯一方法是:

git add changed # example, add changed to the commit 
git commit -v --amend # launch editor, edit commit message 

,让您可以轻松地编辑上次提交(无论是内容,或提交信息)

你会发现,然后你可以“T推送到远程的,当你尝试它会用这样的警告被拒绝:

 
! [rejected]  master -> master (non-fast-forward) 
error: failed to push some refs to '[email protected]:xxx/xxx.git' 
To prevent you from losing history, non-fast-forward updates were rejected 
Merge the remote changes (e.g. 'git pull') before pushing again. See the 
'Note about fast-forwards' section of 'git push --help' for details. 

它给你两个选择:

  1. 拉第一,再次推
  2. 力推动(git push -f

如果拉之前,首先 - 你将会把未编辑提交回你的历史,它仍然存在,但你没有问题推送到你的远程分支。原始提交将作为合并显示在历史记录中。

如果强制推送,你是从字面上迫使远程分支接受你当地的历史和覆盖远程分支的历史。

从混帐自己不由自主的也许是最适合用来形容为什么强迫推通常是一个坏主意:

通常情况下,命令拒绝更新远程裁判是不是本地的祖先ref用来覆盖它。此标志禁用检查。 这可能会导致远程存储库丢失提交;小心使用它。

在上下文中,“失去的承诺”将旧版本的提交您编辑的 - 但它也可能包括改变同事推你的第一推,并强制推在两者之间。由于这个原因,这是一个冒险的操作。

如果你需要它是可以做到的 - 但无论哪种迅速行动起来(这样就没有人下载borked提交),或者你知道会造成任何其他开发商推和拉那个分支问题。

+0

谢谢,请参阅我的编辑 – Yosef 2012-03-08 11:06:27

3

如果没有其他人已经得到了与故障信息提交的是,你可以你的头指针复位的状态,你前作出承诺:

git reset --soft HEAD^ 

这将撤消上次提交,并把文件在那个提交阶段,你可以再次提交一个新的消息。请注意,您必须使用--force进行推送,因为您实际上覆盖了服务器上的历史记录:

git commit -m 'new and correct message goes here' 
git push --force origin master