【问题标题】:Make adjustment to previous commit without recreating commit在不重新创建提交的情况下调整先前的提交
【发布时间】:2021-06-16 10:59:08
【问题描述】:

我曾经使用gitx 来暂存更改以进行提交,但我已切换到纯粹的终端工作流程 + Fugitive.vim。我真正怀念 gitx 的一个特性是能够在之前的提交中进行调整。例如,如果在之前的提交中添加了某个部分,但不应该添加,那么 gitx 可以很容易地拉出该部分并修改之前的提交。

我目前进行此类更改的工作流程是:

  1. git show
  2. 复制提交信息
  3. git reset --soft HEAD^
  4. 使用 Fugitive 或 git add -i 进行我想做的任何更改
  5. git commit
  6. 粘贴之前复制的提交信息
  7. 确认

以前方便的两步过程现在变得非常繁琐。还有其他我想念的方法吗?

git commit --amend -CHEAD --interactive 对我来说似乎很有希望,但它似乎根本不起作用。

【问题讨论】:

  • 你仍然可以为此使用 gitx。
  • 作为一般提示,“它似乎根本不起作用”不是一个很有帮助的短语,因为它没有告诉我们任何关于实际发生的事情。你收到错误了吗?它做了什么超出你预期的事情吗?似乎什么都没发生?

标签: git vim vim-fugitive gitx


【解决方案1】:

为了完成相同的任务,我使用以下方法:


# Find the starting commit where I need to place changes

git log --oneline --graph --decorate

# Ask for editing commit(s)

git rebase -i {{commit-hash-from-log-history}}

# Enter "edit" for commit(s) you want change, then save
# Add, Edit or Remove files

# Finalize editing

git rebase --continue

# Or, if you want to abort

git rebase --abort

请告诉我它是否也适合你。

【讨论】:

  • 我不认为这能达到同样的效果。在 rebase 中使用 edit 只会在该提交处停止,如果我想调整提交,我仍然需要手动进行更改然后保存/提交,所以我有点回到同样的情况。
  • 我曾经和edit一起使用gitx的“修改”功能一起,所以它们是相辅相成的工作流程,但不能互相替代。跨度>
【解决方案2】:

git 命令行对编辑文件一无所知,因此您总是需要两个步骤:进行更改,然后将更改应用到某个提交。

如果要修改的提交是分支上最新的,可以使用the options to git commit中的两个:

--amend: 通过创建一个新的提交来替换当前分支的提示......原始提交的消息被用作起点,而不是一个空消息

--no-edit:在不启动编辑器的情况下使用选定的提交消息。例如, git commit --amend --no-edit 修改提交而不更改其提交消息。

如果您想修改更深入的历史提交,您需要使用git rebase --interactive 并将针对该提交的命令从“pick”更改为“edit”。然后你做同样的事情,但是一旦你完成了,你运行git rebase --continue 以便 git 重播更改之后那个点。

【讨论】:

    猜你喜欢
    • 2022-01-12
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 2021-02-15
    • 2013-07-10
    • 1970-01-01
    相关资源
    最近更新 更多