首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何压缩拉请求打开后的提交?

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

Stack Overflow用户
提问于 2017-03-31 18:11:29
回答 1查看 3.4K关注 0票数 2

我看过所有可能的答案,也看过博客,但我觉得我搞砸了。

我试过-

git rebase -i upstream/master

然后在第一行之后将pick更改为squash,但是我一次又一次地得到合并冲突。所以我终于读到了一个答案,其中建议-

代码语言:javascript
复制
#!/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,我认为这会使事情变得更糟。如果你需要更多的信息,就问问吧。

这是公共关系-

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-31 18:30:18

我从上游存储库开始:

代码语言:javascript
复制
$ git clone https://github.com/mushorg/glutton
$ cd glutton

为了让我的遥控器看起来像你的名字:

代码语言:javascript
复制
$ git remote rename origin upstream

然后我去找你的公关:

代码语言:javascript
复制
$ git fetch upstream pull/62/head
$ git checkout FETCH_HEAD

您显然不需要这个步骤,因为您已经在本地进行了更改。

为了确认我看到的是同样的东西,我看到了以下的变化:

代码语言:javascript
复制
$ 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分支开始:

代码语言:javascript
复制
$ git reset upstream/master

这将将存储库(而不是工作目录)重置为upstream/master分支的状态。由于它不修改工作目录的状态,这意味着您的所有更改都将保留,而不是提交历史记录。在此,我们看到:

代码语言:javascript
复制
$ 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")

现在我们可以创建一个新的提交:

代码语言:javascript
复制
$ git add -u
$ git commit

现在,在上游master分支的顶部有一个提交。然后,您将强制将其推送到您自己的master分支,后者将更新PR。

(注意:如果你担心搞砸或丢失你的更改或诸如此类的东西,那么要么在一个新的分支上工作,要么只是在本地复制你的工作目录,然后去做。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43147130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档