拉动请求打开后如何压缩提交?

时间:2017-03-31 18:11:29

标签: git

我已经查看了所有可能的答案,并且还阅读了博客,但我认为我搞砸了很糟糕。

我试过了 -

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 -

https://github.com/mushorg/glutton/pull/62

enter image description here

1 个答案:

答案 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。

(注意:如果您担心搞砸某些事情或丢失更改或类似的事情,请在新分支上工作,或者只是制作工作目录的本地副本并改为工作。)