git checkout将未分段的文件带到新分支

时间:2016-04-04 11:15:18

标签: git gitlab git-bash

我一直在尝试使用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

3 个答案:

答案 0 :(得分:4)

  

git checkout将未分段的文件带到新分支

它不是一个错误。

git的行为方式

enter image description here

在下图中,您可以看到 3 states

<强> Git has three main states that your files can reside in:

  • 致力于
  • 已修改
  • 上演

它们都在您的分支机构之间共享。但是当您结帐分支时,您更改了HEAD,这样即使您结帐分支机构,也会在您的存储库之间共享staging area && working directory

How to checkout different branch with clean working directory and stage area?

如果您希望在工作目录中没有任何“剩余”的情况下签出干净的分支,并且您可以创建一个新的worktree,这将导致您的存储库的共享视图(所有内容是共享的)但是有一个不同的工作目录和暂存区。

来自git v2.5

git worktree add <new_path>

现在在你的任何分支中做任何你想做的事。它将创建2个独立的工作文件夹,彼此分开,同时指向同一个存储库。

使用wortree,您无需执行任何clearreset即可删除所有已暂存且未跟踪的内容。

以下是如何操作的演示:

enter image description here

答案 1 :(得分:3)

这是一个功能,而不是一个错误,从那时起就一直这样,据我所知。如果git认为它可以安全地进行本地修改,那就是这样。

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

答案 2 :(得分:1)

Git不会更改存储库中当前未跟踪的文件。 在您的示例中,您只创建了一个未跟踪的文件( $statement2 = $this->Db->prepare("INSERT INTO RO_eventsvol(id,e_id) VALUES (:id,:e_id)"); foreach ($_POST['fest'] as $fest) { $statement2->bindparam(':e_id',$fest, PDO::PARAM_INT); $statement2->bindparam(':id',$last_id, PDO::PARAM_INT); $statement2->execute(); } $statement3 = $this->Db->prepare("INSERT INTO RO_tasksvol(id,t_id) VALUES (:id,:t_id)"); foreach ($_POST['tid'] as $task) { $statement3->bindparam(':t_id',$task, PDO::PARAM_INT); $statement3->bindparam(':id',$last_id, PDO::PARAM_INT); $statement3->execute(); } )。

所以Git的行为绝对正常。

如果newfile未提交更改,Git将不允许您切换到主分支。

例如,这将由Git处理:

git add newfile

深入解释: https://stackoverflow.com/a/8526610/882697