我如何将最后的N承诺集成到一个承诺中?
当前回答
这是超级可爱的,但在某种寒冷的方式,所以我只会把它推到戒指中:
GIT_EDITOR='f() { if [ "$(basename $1)" = "git-rebase-todo" ]; then sed -i "2,\$s/pick/squash/" $1; else vim $1; fi }; f' git rebase -i foo~5 foo
翻译:为 git 提供一个新的“编辑器”,如果要编辑的字体名称是 git-rebase-todo(互动的 rebase prompt) 会改变所有,但第一个“点”到“squash”,否则 spawns vim - 这样,当你被要求编辑破碎的承诺消息时,你会得到 vim。
也许我会做马克·隆加尔所建议的事情。
其他回答
方法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 命令使用。
git rebase -i HEAD~n
n(=4在这里)是最后的承诺的数字,然后你得到了以下选项,
pick 01d1124 Message....
pick 6340aaa Message....
pick ebfd367 Message....
pick 30e0ccb Message....
更新如下,选择一个承诺,并将其他人推到最新的,
p 01d1124 Message....
s 6340aaa Message....
s ebfd367 Message....
s 30e0ccb Message....
详细信息点击链接
如何回答与此类工作流相关的问题?
许多地方的承诺,混合了多种合并,从大师,最终推到远程,PR和合并到大师由审查员(是的,开发人员将更容易合并 - 经过大师,但团队认为这将减缓过程)。
我没有在这个页面上看到这样的工作流(这可能是我的眼睛)如果我正确地理解复制,多种融合将需要多种冲突解决方案。
所以,这似乎为我们工作。
git pull master git checkout -b new-branch git checkout -b new-branch-temp edit and commit a lot locally, merge master regularly git checkout new-branch git merge --squash new-branch-temp // puts all changes in stage git commit 'one message to rule them all' git push Reviewer does PR and merges to master。
使用 git rebase -i <after-this-commit> 并在第二次和随后的命令中取代“squash”或“fixup”,如手册中所描述。
在此例子中, <after-this-commit> 是 SHA1 hash 或当前分支的 HEAD 的相对位置,从该分支的 Commits 被分析为 rebase 命令. 例如,如果用户希望从当前 HEAD 查看 5 个 Commits 在过去的命令是 git rebase -i HEAD~5.
基于克里斯·约翰森的回答,
从 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 承诺 - 修改,以手动修改。
推荐文章
- GitHub -未能连接到GitHub 443 windows/连接到GitHub失败-无错误
- 如何使Eclipse/EGit在更新后识别现有的存储库信息?
- 撤销意外git隐藏pop
- 我怎么能让詹金斯CI与Git触发器推到主人?
- Git:哪个是分支的默认配置远程?
- 如何从拉请求中删除提交
- 如何用分发文件发布npm包?
- 跟踪在GitHub上创建的一个新的远程分支
- 没有空格的合并会产生冲突
- 如何使用refspec将Git标记推到分支?
- 如何使用Git向远程存储库进行初始推送?
- 将文件的当前工作副本与另一个分支提交的副本区别对待
- 配置Git接受特定https远程的特定自签名服务器证书
- 如何将一个特定的提交从一个分支合并到Git中的另一个分支?
- 通过SSH配置Git登录一次