Git快进一个提交

17
* 9dbd857 (hotfix-correct-java-jdk-path, feature/add-ansible-galaxy-requirements-file) requirements.yml: adds maven and nodejs requirements
* 1643619 (QOL-1640-enable-vpc-peering) roles/ansible-linux-commons: change value of hostname in cloud-init
* b5fd2a4 roles/bamboo-agent: add bitbucket ssh host key to /etc/ssh/ssh_known_hosts
* d5cc1f7 vpc cfn template: produce outputs conditionally
* 3b87efe vpc cfn template: use csv for subnet/AZ mapping
* 2e93096 roles/bamboo-agent: Install chrome on agents
* 9aeb07e roles/bamboo-agent: install chromium browser
* 89e852d (HEAD -> feature/QOL-1649-install-chrome) README: display the current directory structure of inventories
* 1f55c4b inventories/test: define root volume size
* 07d902e bamboo-ec2 cfn: specify root volume size

这是我的(最近的)历史记录。

我希望feature/QOL-1649-install-chrome移动到一个提交之前,即9aeb07e

我尝试了cherry pick,但然后我得到了那个提交的“副本”放在feature/QOL-1649-install-chrome分支上。但我想要的(我认为)是一个快进。

2个回答

37

你可以用git reset来实现,但出于一般的安全和整洁考虑,我更喜欢使用git merge --ff-only。要使用它,请检出您想要快进的分支(您已经有了),然后运行git merge --ff-only <commit-hash>

git merge --ff-only 9aeb07e

我使用这个命令非常频繁,所以我为它创建了一个别名 git mff(快进合并)。


编辑,2020年11月:请注意,您不必在此处使用原始哈希 ID;git mff origin/somebranch 也可以正常工作。您还可以在此处使用原始哈希。这是Git的一般规则的一部分:如果您可以使用原始哈希,则可以使用分支名称、标记名称、远程跟踪名称等。

围绕这个一般规则有一些特殊情况,特别是,如果您使用原始哈希 ID 和 git checkout 命令,您将得到 Git 称之为“分离 HEAD(detached HEAD)”的状态,而如果您使用分支名称和 git checkout,您将“在分支上”(即“附着 HEAD”:与分离相反,尽管 Git 文档从未这样称呼它:它只说“在分支上”)。Git 2.23 及更高版本中的新git switch 命令处理这个问题更好,在它将要切换到分离-HEAD 模式时,它会要求您添加--detach选项。但对于这个 git mff 别名,没有需要担心的特殊情况。


谢谢。我尝试了 git reset,它起作用了,但是 git merge 带来的安全感让我更加开心! - Felipe Alvarez
对我来说也是一样的 - 我运行 git fetch,然后运行 git mff 而不是 git pull。如果 mff 失败了,我会考虑是否要合并或变基。如果 mff 成功了,几乎总是我想要的结果。 - torek
使用git reset --hard存在哪些安全隐患? - undefined

5
git checkout feature/QOL-1649-install-chrome
git merge --ff-only 9aeb07e

或者

git reset --hard 9aeb07e

替代合并。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接