我已经查看了所有可能的答案,并且还阅读了博客,但我认为我搞砸了很糟糕。
我试过了 -
git rebase -i upstream/master
然后在第一行之后将pick
更改为squash
,但我一次又一次地遇到合并冲突。所以最后我读了一篇关于SO的答案,建议这个 -
#!/bin/bash
if [ $# -ne 1 ]; then
echo "Missing parameter: number of commits to squash."
exit 1
fi
echo "Squashing $1 commits..."
git reset --soft HEAD~$1
git log --format=%B%n --reverse "HEAD@{1}" -n $1 > _msg.txt
git commit -t _msg.txt
rm _msg.txt
echo "Done!"
所以我尝试了git-squash 6
,我认为这更加困难了。如果您需要更多信息,请询问。
继承人PR -
答案 0 :(得分:2)
我从上游存储库开始:
$ git clone https://github.com/mushorg/glutton
$ cd glutton
只是为了使我的远程名称看起来像你的名字:
$ git remote rename origin upstream
然后我拿到你的PR:
$ git fetch upstream pull/62/head
$ git checkout FETCH_HEAD
您显然不需要此步骤,因为您已在本地进行了更改。
为了确认我看到的是同样的事情,我看到以下变化:
$ git log --oneline master..
cdbca37 Merge branch 'master' of https://github.com/HashCode55/glutton
b37aafd SMTP responses fixed and random wait time added
f25198e supports random wait time for response
4cfcc1d random removed
f2bfed7 refactor
da3dbdb refactor
3bfb62c removed rand function
1bb8a43 SMTP responses fixed
088f6df merged
a383e09 Revert "Revert "removed""
f1bb1c2 Revert "removed"
97bac3f removed
97a0408 Changes
有些事情跳出来:
master
分支上工作,您可能会发现更易于管理的事情。也就是说,在开始进行任何更改之前,请先从git checkout -b my-spiffy-feature
开始。如果您将定期向上游做出贡献,那么如果您的master
分支在某个时间点始终反映上游master
分支的状态,那么您的生活将是最简单的,因为这允许您使用更新本地主分支一个简单的git pull upstream master
。upstream/master
上进行变基。git reset
。如果您按照上述步骤操作,则可以避免引发您的所有冲突和并发症。
压缩所有这些更改的最简单方法可能是将当前分支重置回上游master
分支:
$ git reset upstream/master
这将重置存储库,但不您的工作目录,重置为upstream/master
分支的状态。由于它不会修改工作目录的状态,这意味着将保留所有更改,但不会保留提交历史记录。在这一点上,我们看到:
$ git status
[...]
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: app/server.go
modified: smtp.go
no changes added to commit (use "git add" and/or "git commit -a")
现在我们可以创建一个新提交:
$ git add -u
$ git commit
现在,您可以在上游master
分支之上进行一次提交。然后,您可以强制将此推送到您自己的master
分支,这将更新PR。
(注意:如果您担心搞砸某些事情或丢失更改或类似的事情,请在新分支上工作,或者只是制作工作目录的本地副本并改为工作。)