使用git,我如何保存进度(以便以后可能会回滚)而无需承诺

  • 本文关键字:承诺 git 何保存 使用 保存 git squash
  • 更新时间 :
  • 英文 :


有时候,在开发过程中,我在尝试使某些工作决定尝试新事物时达到了一定的意义。我想在当前工作的基础上构建(因此git stash无法正常工作(,如果我认为我的新方法无处可去,则能够回到当前状态。但是,我目前的工作通常不在我想承诺并将其永远存在的状态下,因为尝试新事物通常是要修复破坏的东西。

这里最好的行动是什么?我考虑过的一件事是现在提交,然后如果我成功地采用新方法成功,请另一种提交并将两者挤压在一起。这是解决此问题的推荐方法吗?

您自己建议的挤压委员会是一种方法。

另一种选择是提交一次,然后使用以下内容在块中对犯罪进行修改:
git commit --all --amend --no-edit

我会争辩说,随时可以提交!除非您将它们推到遥远的地方,否则提交不会伤害任何东西。

这是我通常只使用简单命令的方式。我重申您的问题以确保:" 您在新功能开发过程中找到了一个新错误。"

$ # coding but now you found a serious bug otherwise
$ # you cannot continue the feature development
$
$ git commit -m "(1) In the middle of feature development X"
$
$ # Making a bugfix
$ git add . && git commit -m "(2) Bugfix"
$
$ # Continue with your feature development
$ git commit -m "(3) Finished development X"
$
$ # origin -- (1) -- (2) -- (3)

现在,如果(2(是您的功能开发提交的一部分,则可能需要将其挤入一个提交。如果是这样,

$ git reset --soft (1)~1 # where (1) is a sha-1 of the commit (1)
$ git commit -m "Feature development X with a minor bugfix" # (4)
$
$ # origin -- (4)

请注意,git reset --soft保留当前的工作目录状态。如果(2(独立于X,而是对系统的常见修复,则您将其这样做:

$ git checkout (1)~1 # Go back to the original state
$ git cherry-pick (2)  # (2') First apply bugfix, expecting no conflict
$ git cherry-pick (1) && git cherry-pick (3)
$ git reset --soft HEAD^ && git commit --amend -m "A new feature X"  # (5)
$
$ # origin -- (2') -- (5)

最新更新