我最近在GitHub上开了一个回购。我是Git的新手。和新手一样,我承诺使用默认名称和电子邮件,我在最好的noob传统中发现了五次提交为时已晚。现在开始有趣了,因为我开始搜索有关如何更改作者和信息的信息。这些提交的提交者名称。精细。我基本上找到了以下信息和很多副本:
How to remove selected commit log entries from a Git repository while keeping their changes?
Change the author and committer name and e-mail of multiple commits in Git
这个问题似乎并不少见。我只能说没有一个解决方案有效。其中一半是同一git filter-branch -f --env-filter
脚本的变体。我尝试多次处理该脚本。问题是在应用脚本后,我无法推送。 “快进推动被拒绝”或类似的东西。好吧,唯一的方法就是拉。拉动后,所有旧信息再次出现+带有新信息的新分支。我已经坐在这里有四个分支,以最恶劣的方式合并,都包含不同作者姓名的相同信息,包括我想删除的那个。
可以简短地删除它,我也尝试删除选定的提交,这会产生我无法解决的令人毛骨悚然的冲突(如何???),并使用正确的作者将一些提交压缩为较新的提交信息,导致当前项目状态被破坏。更好的是,我在执行git rebase -i
后有时会遇到分段错误,我在此通知:http://lists-archives.org/git/729800-rebase-i-segmentation-fault-and-another-problem.html完全合乎逻辑。 (谢天谢地)唯一有效的是git rebase --abort
,它多次保存了我的屁股。
我希望我的挫败感不会被击退,而是逗你并激励你帮助我。我想:
最后删除所述作者信息
奖励:摆脱包含相同信息的所有分支。
但是我对第一个也很满意,如果在没有破坏当前状态的情况下删除过去的分支的障碍对于一个git新手来说太过分了。提前致谢。
答案 0 :(得分:5)
问题是在应用脚本后,我无法推送。 “快进推动被拒绝”或类似的东西。
如果您尝试修改历史记录,则无法避免此问题。 Git拒绝推送,因为它导致数据丢失;在这种情况下,数据是旧作者。您只需要git push
使用--force
标记即可告诉您确定自己在做什么。
Git中的Messes可能很难解决。如果master
是一团糟,我通常会用git checkout HEAD~
回溯历史,直到我回到事情并不可怕的时候。然后我git branch --force master
重置master
到那一点。最后,我用git branch -D badBranch
删除了所有混乱的分支。
小心。
答案 1 :(得分:1)
如果还没有人关注您的回购,那么只需修改您的本地回购并强制推送到GitHub。接受任何尴尬。我一直在(重新)以类似的方式建立一个回购周。
如果它是一个学生项目并且讲师已经把它拉了下来,那就更难了 - 只是为了让你欣赏好管理员的价值; - )