我如何将最后的N承诺集成到一个承诺中?
当前回答
如果你在一个遥远的分支(所谓的功能分支)从一个黄金储备(黄金_repo_name),那么这里是技巧将你的承诺分成一个:
Checkout the golden repo git checkout golden_repo_name 创建一个新的分支从它(黄金 repo)如下 git checkout -b dev-branch Squash merge 与您的本地分支 你已经 git merge --squash 功能分支 承诺您的变化(这将是唯一的承诺在 dev-branch) git commit -m "My feature complete" 将分支推到您的本地存储库 git push 起源 d
其他回答
如果您正在使用 GitUp,选择您想要与其父母合并的承诺,并按下 S. 您必须为每个承诺做一次,但它比与正确的命令线引发更简单。
git rebase -i HEAD^^
在哪里 ^'s 的数量是 X
(此分類上一篇: 最後兩個命令)
基于克里斯·约翰森的回答,
从 bash 添加一个全球性的“squash”标志:(或在 Windows 上使用 Git Bash)
git config --global alias.squash '!f(){ git reset --soft HEAD~${1} && git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1})"; };f'
...或使用Windows的命令促销:
git config --global alias.squash "!f(){ git reset --soft HEAD~${1} && git commit --edit -m\"$(git log --format=%B --reverse HEAD..HEAD@{1})\"; };f"
您的 ~/.gitconfig 现在应该包含此标题:
[alias]
squash = "!f(){ git reset --soft HEAD~${1} && git commit --edit -m\"$(git log --format=%B --reverse HEAD..HEAD@{1})\"; };f"
使用:
git squash N
它自动将最后的 N 承诺集成在一起,包括。
注意: 结果的承诺消息是所有失败的承诺的组合,顺序. 如果你不满意,你总是可以 git 承诺 - 修改,以手动修改。
许多答案是基于Git Rebase命令,但在我的经验中,它对Git初学者来说有点复杂和先进。
假设你想排除最后3个命令,然后以下是步骤:
下载现行承诺ID: 使用 git log -1 --online 并记住当前状态的承诺ID(仅在您与 git reset 做错事的情况下) 返回 3 个承诺: 使用 git reset --soft HEAD~3 您将返回 3 个承诺(并忘记您以前做过这三个承诺) 做一个新的承诺: 现在简单地做 git commit -m <NEW_SINGLE_MESSAGE> 将自动结合 t
如果与 git reset 发生错误,您可以通过 git reset --soft <ORIGINAL_COMMIT> 返回原始状态。
如果您想将每个承诺分成一个单一承诺(例如第一次公开发布项目时),请尝试:
git checkout --orphan <new-branch>
git commit
推荐文章
- Visual Studio代码如何解决合并冲突与git?
- 无法推送到远程分支,无法解析到分支
- Git:如何将数据库重置为特定的提交?
- 如何在合并期间使用Git和命令行保存本地文件或远程文件?
- 能够用一个命令推到所有git遥控器?
- 重新基于Git合并提交
- 忽略已经签入目录的内容?
- 如何从windows cmd保存git提交消息?
- (Mac) -bash: __git_ps1:命令未找到
- 如何删除多个已删除的文件在Git仓库
- 使用vimdiff查看所有' git diff '
- 如何拉特定的目录与git
- 本地存储库中的文件与源文件之间的差异
- 将Git存储库内容移动到另一个存储库,保存历史记录
- 如何在GitHub上创建自己的存储库?