Git:合并前提交?

9
我被建议在运行git pull和合并之前提交所有更改。这有意义吗?如果我在提交更改之前运行pullmerge,然后在合并后提交它们呢?
4个回答

16

在拉取之前提交并不总是明智的做法 —— 您应该考虑将您的工作藏起来。

更好的思路是考虑您的暂存区。理想情况下,在尝试合并远程更改之前,您希望它保持干净(请记住,git pull = git fetch + git merge)。

git commit 是实现这一点的一种方法,但它会更改您的历史记录 —— 如果您关心将您的仓库保持在一个不断工作的状态下,则会污染它。

而另一方面,git stash 则专为此类用例而构建。

当您想记录工作目录和索引的当前状态,但想返回到一个干净的工作目录时,请使用 git stash。

源自:http://git-scm.com/docs/git-stash

您的工作流程将如下所示:

$ git stash
$ git pull origin master
$ git stash pop stash@{0}

这将允许拉取操作无问题地执行,并在应用你的存储时发生冲突时口头警告你。


2
到目前为止,最有用的答案。你可能应该建议使用 git stash --allgit stash --include-untracked 命令来避免合并操作失败并出现 "untracked files would be overwritten by merge" 的错误提示。 - Magnus Bäck
使用stash的一个注意点是它不会在reflog中创建条目,因此,如果您搞砸了并且丢失了您的stash,您将无法恢复它。在某些方面,提交更加“安全”。您还可以在提交后执行git pull --rebase而不是stash。 - Lochlan

3

未提交的更改总是不好的:

  • 如果您的更改是好的,请提交它们
  • 如果它们是坏的,请丢弃它们。

Git完全不知道未提交的更改。因此,如果出现任何问题,git无法以任何方式帮助您,并且您有可能在出现问题时失去您的工作。

如果您确保在进行任何git操作(例如在您的情况下进行拉取)时没有未提交的更改,则可以避免许多问题。


未完成的更改怎么办?它们不足以提交,但也不是坏的,应该被丢弃...例如,我想从源代码中合并一些代码,在完成这些新更改时会很有帮助。 - Emerson
还有待定状态 :) - Mark Toman

1
如果你试图合并已经被修改的文件,git 将会拒绝执行。这就是为什么先提交更改是个好主意。如果你不按照这个顺序进行,它要么能够成功合并(如果你修改的文件没有参与其他需要合并的提交),要么什么也不会发生,git 会告诉你无法完成合并。

1
如果您在拉取/合并之前提交了代码,那么如果出现问题,您可以回到该点。这不是必须的,但是是一个好的习惯。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接