来自同一分支的git cherry pick

时间:2019-06-24 17:07:33

标签: git

我在大学里使用git已经有两年了,如果我说实话,我仍然不知道自己在做什么。我不确定标题是否恰当地描述了我遇到的问题,但是基本上,我在开发特定功能时对master分支做了很多提交。现在我已经完成了开发此功能的工作,我的后见之明向我展示了这是一个糟糕的主意,因为我现在只需要提交和部署最后几个提交。由于这些早期提交仍在审核中,正在等待批准,因此我不能仅仅将所有内容提交到我的开发服务器上。在尝试弄清楚这一点时,我偶然发现了git cherry-pick,但显然这是用来从其他分支中提取特定提交的...我想...我的问题是,现在我处于此绑定中,是否有办法只从master分支中拉出最后2或3个提交,而没有得到我不想包括的所有更改?我已经阅读了有关SO的其他文章,但是我不确定我是否了解有关樱桃采摘的答案,足以尝试这些答案,或者在这种情况下是否合适。

2 个答案:

答案 0 :(得分:2)

听起来您有一个分支,其中包含您不想要的提交,后来又提交了您要做的,但是您不想破坏该分支:

@DynamoDBTable(tableName = "Student")
public class StudentDO {
    private Integer id;
    private String name;
    private Integer score;

    @DynamoDBAttribute(attributeName = "Id")
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @DynamoDBAttribute(attributeName = "Name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @DynamoDBAttribute(attributeName = "Score")
    public Integer getScore() {
        return score;
    }

    public void setScore(Integer score) {
        this.score = score;
    }

    @Override
    public String toString() {

        return "Student [Name=" + name + ", id=" + id + ", score=" + score + "]";

    }
}

您需要一个新分支。

master branch
A - B - C - D - E - F - G -H - I - J - K
             \                /     \ /
              Unwanted commits     Good commits

,您需要将其重置为不需要的工作。

git checkout -b new-branch

现在,您可以从git reset --hard <hash-of-commit-C> 中挑选所需的提交。

master

答案 1 :(得分:1)

您可以这样做:

git checkout new-branch origin/master # or use whatever branch/revision you think it's ok to start from
git cherry-pick old-branch~2..old-branch # cherry pick the last two revisions of old-branch

如果您喜欢结果,可以用此替换分支

git branch -f old-branch # set old-branch where I am right now
git checkout old-branch

您完成了。