git签出将未分级的文件传送到新分支

git签出将未分级的文件传送到新分支,git,gitlab,git-bash,Git,Gitlab,Git Bash,我一直在尝试使用gitlab CE设置存储库,作为设置的一部分,我创建了一个repo并一直在使用它,当我遇到这样的情况时,在我对文件进行一些修改并使用checkout切换分支后,即使我有未老化的文件,我也可以切换,这与我以前的经验不同,在我提交或隐藏之前,我是不允许结账的 这种体验超越了无缝切换分支的目的,而不必担心意外的入侵 下面突出显示了这些步骤 somasundaram.s@user /d/projects/repositories/newrepo (master) $ ls -ltr

我一直在尝试使用gitlab CE设置存储库,作为设置的一部分,我创建了一个repo并一直在使用它,当我遇到这样的情况时,在我对文件进行一些修改并使用checkout切换分支后,即使我有未老化的文件,我也可以切换,这与我以前的经验不同,在我提交或隐藏之前,我是不允许结账的

这种体验超越了无缝切换分支的目的,而不必担心意外的入侵

下面突出显示了这些步骤

somasundaram.s@user  /d/projects/repositories/newrepo (master)
$ ls -ltr
total 1
-rw-r--r-- 1 somasundaram.s 1049089 13 Apr  4 16:28 README
-rw-r--r-- 1 somasundaram.s 1049089  0 Apr  4 16:31 hi

somasundaram.s@user  /d/projects/repositories/newrepo (master)
$ git branch new-branch

somasundaram.s@user  /d/projects/repositories/newrepo (master)
$ git checkout new-branch
Switched to branch 'new-branch'

somasundaram.s@user  /d/projects/repositories/newrepo (new-branch)
$ touch newfile

somasundaram.s@user  /d/projects/repositories/newrepo (new-branch)
$ ls -ltr
total 1
-rw-r--r-- 1 somasundaram.s 1049089 13 Apr  4 16:28 README
-rw-r--r-- 1 somasundaram.s 1049089  0 Apr  4 16:31 hi
-rw-r--r-- 1 somasundaram.s 1049089  0 Apr  4 16:37 newfile 
somasundaram.s@user  /d/projects/repositories/newrepo (new-branch)
$ git checkout master
Switched to branch 'master'

somasundaram.s@user  /d/projects/repositories/newrepo (master)
$ ls -ltr
total 1
-rw-r--r-- 1 somasundaram.s 1049089 13 Apr  4 16:28 README
-rw-r--r-- 1 somasundaram.s 1049089  0 Apr  4 16:31 hi
-rw-r--r-- 1 somasundaram.s 1049089  0 Apr  4 16:37 newfile

据我所知,这是一个特性,而不是一个bug,从那以后一直如此。如果git认为它可以安全地进行您的本地修改,它就会这样做


如果你想摆脱它们,
git reset--hard

这是一个特性,而不是一个bug,据我所知,从那以后一直如此。如果git认为它可以安全地进行您的本地修改,它就会这样做


如果您想删除它们,
git reset--hard

git不会更改存储库中当前未跟踪的文件。 在您的示例中,您只创建了一个未跟踪的文件(
newfile

所以Git的行为是绝对正常的

如果您未提交更改而
git添加新文件
,git将不允许您切换到主分支

例如,这将由Git处理:

$ git branch new-branch
$ git checkout new-branch
Switched to branch 'new-branch'
$ echo "test" > newfile
$ git add newfile
$ git checkout master
A       newfile
Switched to branch 'master'
有关深入解释:

Git不会更改存储库中当前未跟踪的文件。 在您的示例中,您只创建了一个未跟踪的文件(
newfile

所以Git的行为是绝对正常的

如果您未提交更改而
git添加新文件
,git将不允许您切换到主分支

例如,这将由Git处理:

$ git branch new-branch
$ git checkout new-branch
Switched to branch 'new-branch'
$ echo "test" > newfile
$ git add newfile
$ git checkout master
A       newfile
Switched to branch 'master'
有关深入解释:

git签出将未分级的文件传送到新分支

这不是虫子

这是git的行为方式


在下图中,您可以看到
3种状态

Git有三种主要状态可供文件驻留:
  • 承诺的
  • 修改
  • 上演
它们都在您的分支机构之间共享。但是,当您签出分支时,您会更改分支,因此即使在签出分支时,存储库之间也会共享
暂存区域和工作目录


如何使用干净的工作目录和后台区域签出不同的分支机构?
如果您希望签出clean branch,而工作目录和暂存区中没有任何“剩余”,则可以创建一个新的
工作树
,这将导致存储库的共享视图(所有内容都是共享的),但具有不同的工作目录和暂存区


来自GitV2.5
git工作树添加
现在,在你的任何一个分支中,你想做什么就做什么。它将创建两个彼此分离的工作文件夹,同时指向同一存储库

使用wortree,您无需执行任何
清除
重置
即可删除所有暂存和未跟踪的内容

下面是如何执行此操作的演示:


git签出将未分级的文件传送到新分支

这不是虫子

这是git的行为方式


在下图中,您可以看到
3种状态

Git有三种主要状态可供文件驻留:
  • 承诺的
  • 修改
  • 上演
它们都在您的分支机构之间共享。但是,当您签出分支时,您会更改分支,因此即使在签出分支时,存储库之间也会共享
暂存区域和工作目录


如何使用干净的工作目录和后台区域签出不同的分支机构?
如果您希望签出clean branch,而工作目录和暂存区中没有任何“剩余”,则可以创建一个新的
工作树
,这将导致存储库的共享视图(所有内容都是共享的),但具有不同的工作目录和暂存区


来自GitV2.5
git工作树添加
现在,在你的任何一个分支中,你想做什么就做什么。它将创建两个彼此分离的工作文件夹,同时指向同一存储库

使用wortree,您无需执行任何
清除
重置
即可删除所有暂存和未跟踪的内容

下面是如何执行此操作的演示:



上周我尝试过这个,但在我将文件暂存或隐藏之前,我是不允许切换的,这让我觉得我破坏了一些配置,或者可能不得不进行一些配置。当我第一次注意到时,我很惊讶,但绝对正确。@SomasundaramSekar只有在两个版本之间的文件没有更改时,它才会这样做。如果您在本地更改的任何文件在您签出的版本和您尝试签出的版本之间也发生了更改,你会得到你描述的行为。我认为这是错误的,因为Git没有跟踪
newfile
。我上周尝试了这一点,但在我暂存或隐藏文件之前,我不允许切换,这让我觉得我破坏了一些配置,或者可能不得不进行一些配置。当我第一次注意到时,我很惊讶,但绝对正确。@SomasundaramSekar只有在两个版本之间的文件没有更改时,它才会这样做。如果您在本地更改的任何文件在您签出的版本和您尝试签出的版本之间也发生了更改,您将得到您描述的行为。我认为这是错误的,因为