我如何将最后的N承诺集成到一个承诺中?


当前回答

如果您想将每个承诺分成一个单一承诺(例如第一次公开发布项目时),请尝试:

git checkout --orphan <new-branch>
git commit

其他回答

例如,如果您想在一个分支(远程存储库)中排除最后3个承诺,例如: https://bitbucket.org

我所做的就是

git reset --soft HEAD~3 git commit git push 起源 <branch_name> --force

程序1

(一)定义承诺短暂的哈希

# git log --pretty=oneline --abbrev-commit
abcd1234 Update to Fix for issue B
cdababcd Fix issue B
deab3412 Fix issue A
....

在这里,即使是 git log --oneline 也可以用来获得短暂的 hash。

# git rebase -i deab3412 

....
pick cdababcd Fix issue B
pick abcd1234 Update to Fix for issue B
....

....
pick cdababcd Fix issue B
squash abcd1234 Update to Fix for issue B
....

# git log --pretty=oneline --abbrev-commit
1122abcd Fix issue B
deab3412 Fix issue A
....

# git push origin +master

程序2

首先,添加所需的文件

git add <files>

git commit --fixup=OLDCOMMIT

现在这个创建了一个新的承诺在头顶与 fixup1 <OLDCOMMIT_MSG>。

其次,下令下令下令下令下令下令下令下令下令下令下令下令。

git rebase --interactive --autosquash OLDCOMMIT^

在这里 ^ 意味着以前的承诺到 OLDCOMMIT. 这个 rebase 命令在一个编辑器(vim 或 nano)上打开了互动窗口,我们不需要做任何事情,只是保存和输出是足够的. 因为转移到此的选项将自动移动最新的承诺到旧的承诺旁边,并将操作转换为 fixup(相当于 squash)。 然后 rebase 继续完成。

程序3

如果需要将新的更改添加到最后的承诺方式 - 更改可以使用 git-commit。

    # git log --pretty=oneline --abbrev-commit
    cdababcd Fix issue B
    deab3412 Fix issue A
    ....
    # git add <files> # New changes
    # git commit --amend
    # git log --pretty=oneline --abbrev-commit
    1d4ab2e1 Fix issue B
    deab3412 Fix issue A
    ....  

结论

我建议尽可能避免吉特重新设置 - 特别是对于吉特新闻. 除非你真的需要自动化一个过程,基于几个承诺,有一个不那么异国情调的方式。

将被排除的承诺放在一个工作分支(如果它们还没有) - 使用 gitk 为此 查看目标分支(例如“主”) git merge --squash (工作分支名称) git commit

承诺的消息将基于 squash 预受欢迎。

如果您正在与 GitLab 合作,您可以按下面的 Merge 请求中的 Squash 选项,承诺消息将是 Merge 请求的标题。

此分類上一篇

方法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