我如何将最后的N承诺集成到一个承诺中?
当前回答
我建议尽可能避免吉特重新设置 - 特别是对于吉特新闻. 除非你真的需要自动化一个过程,基于几个承诺,有一个不那么异国情调的方式。
将被排除的承诺放在一个工作分支(如果它们还没有) - 使用 gitk 为此 查看目标分支(例如“主”) git merge --squash (工作分支名称) git commit
承诺的消息将基于 squash 预受欢迎。
其他回答
要避免在重定向同一分支中的承诺时不得不解决任何合并冲突,您可以使用下列命令:
git rebase -i <last commit id before your changes start> -s recursive -X 我們
要将所有承诺分成一个,当您被要求编辑将合并的承诺时(在旗帜上),更新所有但第一个行动,从选择到分解,如其他答案中所建议。
在这里,我们使用合并策略(旗帜)回归和战略选项(X)我们的,以确保历史上后来的承诺赢得任何合并冲突。
注意:不要把这与我们做别的事情的 git rebase 混淆。
引用: git rebase recursive merge 策略
只需将此 bash 函数添加到.zshrc 文件的 bash。
# Squash last X commits with a Commit message.
# Usage: squash X 'COMMIT_MSG'
# where X= Number of last commits.
# where COMMIT_MSG= New commit msg.
function squash() {
if [ -z "${1}" -o -z "${2}" ]; then
echo "Usage: \`squash X COMMIT_MSG\`"
echo "X= Number of last commits."
echo "COMMIT_MSG= New commit msg."
return 1
fi
git reset --soft HEAD~"$1"
git add . && git ci -m "$2" # With 100 emoji
git push --force
}
然后跑
squash X 'New Commit Message'
你已经完成了。
2020年简单的解决方案:
git reset --soft HEAD~2
git commit -m "new commit message"
git push -f
2 意味着最后两个命令将被打破,你可以用任何数字取代它。
方法1 如果你有很多承诺
git rebase -i master 然后按一下键盘“i”来编辑
你会看到这样的:
pick etc1
pick etc2
pick etc2
用“f”取代“ pick”这个词,然后按 esc y :wq。
pick etc1 //this commit will the one commit
f etc2
f etc2
按下这个命令
git push origin +head
方法2 如果你有少数承诺,你可以这样做去删除承诺,你必须这样做去删除你的第二承诺等等。
git reset --soft HEAD^1 // or git reset --soft head~1
git commit --amend //then press `:wq`
git push -f
方法 3 如果你已经有一个承诺,你不想提交另一个承诺更多
git add files...
git commit --amend //then press `:wq`
git push origin +head
下面是另一个视觉例子,在执行后会发生什么: git rebase -i HEAD~3
此分類上一篇
來源: https://www.git-tower.com/learn/git/faq/git-squash/
推荐文章
- Bower: ENOGIT Git未安装或不在PATH中
- Bitbucket上的Git:总是要求密码,即使上传了我的公共SSH密钥
- Git别名-多个命令和参数
- 如何添加一个“打开git-bash这里…”上下文菜单到windows资源管理器?
- 是否可以在Git中只提取一个文件?
- 当我做“git diff”的时候,我怎么能得到一个并排的diff ?
- 在git中如何将提交移动到暂存区?
- 如何缩小。git文件夹
- 如何在本地删除分支?
- 找到包含特定提交的合并提交
- Windows上Git文件的权限
- 如何从一个枝头摘到另一个枝头
- 如何获得在两次Git提交之间更改的所有文件的列表?
- 什么是跟踪分支?
- 如何在不稳定的连接上完成一个大项目的git克隆?