首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当当前分支上有未提交的更改时,签出另一个分支

当当前分支上有未提交的更改时,签出另一个分支
EN

Stack Overflow用户
提问于 2014-02-27 05:29:14
回答 5查看 195.2K关注 0票数 429

大多数时候,当我尝试签出另一个现有的分支时,如果我在当前分支上有一些未提交的更改,Git不允许我这样做。因此,我必须首先提交或隐藏这些更改。

然而,偶尔Git确实允许我签出另一个分支,而无需提交或存储这些更改,并且它会将这些更改带到我签出的分支。

这里的规则是什么?更改是暂存的还是未暂存的,这很重要吗?将更改带到另一个分支对我来说没有任何意义,为什么git有时会允许这样做?也就是说,它在某些情况下有帮助吗?

EN

回答 5

Stack Overflow用户

发布于 2014-02-27 05:33:49

您有两个选择:保存您的更改:

代码语言:javascript
复制
git stash

然后再把它们取回来:

代码语言:javascript
复制
git stash apply

或者将您的更改放在一个分支上,这样您就可以获得远程分支,然后将您的更改合并到该分支上。这是git最棒的事情之一:您可以创建一个分支,提交到它,然后将其他更改提取到您所在的分支上。

您说这没有任何意义,但您只是这样做,以便您可以在执行pull之后随意合并它们。显然,您的另一个选择是在分支的副本上提交,然后执行pull。假设你要么不想这样做(在这种情况下,我对你不想要分支感到困惑),要么你害怕冲突。

票数 65
EN

Stack Overflow用户

发布于 2014-02-27 06:09:19

如果新分支包含与该特定已更改文件的当前分支不同的编辑,则在提交或隐藏更改之前,它将不允许您切换分支。如果更改的文件在两个分支上是相同的(即,该文件的提交版本),那么您可以自由切换。

示例:

代码语言:javascript
复制
$ echo 'hello world' > file.txt
$ git add file.txt
$ git commit -m "adding file.txt"

$ git checkout -b experiment
$ echo 'goodbye world' >> file.txt
$ git add file.txt
$ git commit -m "added text"
     # experiment now contains changes that master doesn't have
     # any future changes to this file will keep you from changing branches
     # until the changes are stashed or committed

$ echo "and we're back" >> file.txt  # making additional changes
$ git checkout master
error: Your local changes to the following files would be overwritten by checkout:
    file.txt
Please, commit your changes or stash them before you can switch branches.
Aborting

这适用于未跟踪的文件以及跟踪的文件。下面是一个未跟踪文件的示例。

示例:

代码语言:javascript
复制
$ git checkout -b experimental  # creates new branch 'experimental'
$ echo 'hello world' > file.txt
$ git add file.txt
$ git commit -m "added file.txt"

$ git checkout master # master does not have file.txt
$ echo 'goodbye world' > file.txt
$ git checkout experimental
error: The following untracked working tree files would be overwritten by checkout:
    file.txt
Please move or remove them before you can switch branches.
Aborting

一个很好的例子说明了为什么你想要在分支之间移动,同时进行更改,如果你在master上执行一些实验,想要提交它们,但还不是master……

代码语言:javascript
复制
$ echo 'experimental change' >> file.txt # change to existing tracked file
   # I want to save these, but not on master

$ git checkout -b experiment
M       file.txt
Switched to branch 'experiment'
$ git add file.txt
$ git commit -m "possible modification for file.txt"
票数 20
EN

Stack Overflow用户

发布于 2019-11-12 19:26:36

正确的答案是

git checkout -m origin/master

它将来自原始主分支的更改与您的本地甚至未提交的更改合并。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22053757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档