Git:我如何修改服务器的提交?

时间:2011-10-19 01:33:09

标签: git

我已经在EC2上的git服务器上推送了一些提交,而不是在github上。

如何在git服务器上修改这些提交?

操作就像 删除提交,如变基, 更改提交消息

有可能吗?

非常感谢。

2 个答案:

答案 0 :(得分:9)

你可以通过强制推动来做所有事情。将您的本地树更改为您想要的git push -f,它将使用您在本地拥有的内容替换服务器上的树。值得注意的是,这会导致任何其他已拉动您刚刚更换的树的回购产生问题。

答案 1 :(得分:7)

如果您想要破坏性地编辑远程分支的历史记录(例如rebase / amend),请在本地进行更改,然后执行git push --force。有时它不起作用(存储库管理员可以禁用此功能);在这种情况下,您可以尝试使用git push origin :my_branch删除远程分支,然后使用git push origin my_branch再次推送它。否则,您可以使用git revert,如果您在团队中工作,这是推荐的方法(经验法则是不应修改已发布的历史记录)。

以下是一个示例(使用this Github repository):

$ touch SOMETHING
$ emacs SOMETHING 
$ git add SOMETHING 
$ git ci -m SOMETHING
[master d14aaa0] SOMETHING
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 SOMETHING
$ git push
Counting objects: 8, done.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 611 bytes, done.
Total 6 (delta 3), reused 0 (delta 0)
To git@github.com:23Skidoo/ghc-parmake.git
   53f836a..d14aaa0  master -> master
$ git reset --hard "HEAD~"
HEAD is now at 7b2dc96 TODO update.
$ git push --force
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:23Skidoo/ghc-parmake.git
 + d14aaa0...7b2dc96 master -> master (forced update)

查看commit history,您可以看到提交d14aaa0不存在。