git - 我的同事是如何设法让 git checkout 移动文件的?

标签 git

通常当你:

  1. git checkout foo
  2. 修改文件
  3. git checkout 栏

Git 会告诉您不能更改分支,因为您有未提交的修改。 (我面前没有确切的消息,但它是那种效果)。然后,您通常会使用 git stash 来删除这些修改,这样您就可以愉快地进行了。

我的同事(他是 Git 的新手,因此没有故意做任何高级的事情)没有这种行为。在她的机器上,当她执行 git checkout bar 时,它只是将她对 foo 所做的修改移动到 bar 中。这让我很困惑,因为我已经使用 Git 至少一年了,但从未见过它有那样的行为。

我的同事可能做了什么才能让 Git 简单地在分支之间移动未添加/未提交的修改文件,而不是提示和要求 git stash

最佳答案

(我昨天刚在这里写了以下文字给刚接触Git的同事。希望对您有所帮助。)

如果您对分支 A 上的文件进行了更改并想切换到分支 B(不相关),那么最好先将更改提交到分支 A。这样,当您稍后返回时,更改仍将在分支 A 上。 (另一个选项称为“stash ”,这在某些情况下很有用——有关更多信息,请参阅 http://schacon.github.com/git/git-stash.html。)

如果您不先提交更改,则可能会出现两种情况。考虑一个文件“file.txt”,以及分支 A 和 B。这两种情况是:

  1. 分支 A 和分支 B 上的 file.txt 的最新版本是相同的。在这种情况下,“git checkout B”将在成功切换到分支 B 后将对 file.txt 的更改转移到您的工作目录。这对于更改平台配置文件等事情很有用。 Git 将在“git checkout”命令的输出中列出以这种方式携带的文件。
  2. 分支A和分支B上的file.txt的最新版本不同。当你要求切换分支到分支 B 时,git 会拒绝切换分支,因为这样做会覆盖你对 file.txt 的更改。您将从 git 收到一条消息,说明您必须首先提交(或 stash )冲突文件。

如果您有多个更改的文件,那么情况 (2) 中的任何文件都将阻止分支切换。

最后,如果您想放弃对文件的修改,请使用“git checkout -- file.txt”之类的命令。这将丢弃对 file.txt 的所有未提交修改,并将其恢复到当前分支的最新提交版本。

关于git - 我的同事是如何设法让 git checkout 移动文件的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8610892/

相关文章:

git:为什么在我执行 'git push' 之后我在 X 提交之前领先于 origin/master ?

git - 分支和提交有什么区别?

linux - 如何检查 GIT 是否已完全克隆存储库?

git - 如何将我的 Git 存储库转换为 Mercurial 并带上它的标签

linux - Ndless makefile/make 安装错误linux

从 Surround SCM 导入 Git?

git Fatal : Out of memory, malloc 在分支推送时失败

Git 流程 - 摆脱一个特定的功能

python - 如何使用 python(dulwich) 获取指定文件的最后一次提交?

使用 https 和 token 获取 git fetch origin 失败