Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 我如何在签出分支机构的同时确保我当前的分支机构都没有';s的变化是否被延续?_Git_Version Control_Branch_Git Checkout - Fatal编程技术网

Git 我如何在签出分支机构的同时确保我当前的分支机构都没有';s的变化是否被延续?

Git 我如何在签出分支机构的同时确保我当前的分支机构都没有';s的变化是否被延续?,git,version-control,branch,git-checkout,Git,Version Control,Branch,Git Checkout,我希望切换分支,并让git始终设置工作目录内容,以反映我切换到的分支的状态。我正在经历此处所述的行为-git正在决定**是否将某些文件从与我当前分支关联的工作目录传送到我切换到的分支 **这似乎与此处所述的内容相冲突:“签出分支会更新工作目录中的文件,以匹配该分支中存储的版本…” 在某些情况下,我不希望git做出决定——我只希望git使工作目录与新分支的状态匹配。但是,我不想丢失任何更改。我愿意事先承诺或隐藏 可能吗 未提交的更改将保留在您的工作树或索引中,直到您告诉git在哪里提交它们 git

我希望切换分支,并让git始终设置工作目录内容,以反映我切换到的分支的状态。我正在经历此处所述的行为-git正在决定**是否将某些文件从与我当前分支关联的工作目录传送到我切换到的分支

**这似乎与此处所述的内容相冲突:“签出分支会更新工作目录中的文件,以匹配该分支中存储的版本…”

在某些情况下,我不希望git做出决定——我只希望git使工作目录与新分支的状态匹配。但是,我不想丢失任何更改。我愿意事先承诺或隐藏


可能吗

未提交的更改将保留在您的工作树或索引中,直到您告诉git在哪里提交它们

git-add
git-checkout
git-reset
都有一个
--patch
选项。工作流是,做需要做的事情和在需要记录的地方记录是两个独立的任务。你经常会发现自己在进行有效的路边修车,在那里你会发现一团乱麻——通常是我留下的——问题是,你在做工作,做文书工作,但你却直接盯着工作,知道需要做什么

git的方法是,去做。在您的工作树中获得所有正确信息(这可能涉及到一些探索性分支本身)

  • 然后构造一个提交序列,如果你知道你一直在做什么的话,你会首先构造这个提交序列
这是最重要的部分。这才是专业的、可出版的作品。让人扫兴的是,git的意义至少与之前的混乱部分相同



1哈哈哈,他说的是“git方式”,好像只有一个LOL

未提交的更改保留在您的工作树或索引中,直到您告诉git在哪里提交它们

git-add
git-checkout
git-reset
都有一个
--patch
选项。工作流是,做需要做的事情和在需要记录的地方记录是两个独立的任务。你经常会发现自己在进行有效的路边修车,在那里你会发现一团乱麻——通常是我留下的——问题是,你在做工作,做文书工作,但你却直接盯着工作,知道需要做什么

git的方法是,去做。在您的工作树中获得所有正确信息(这可能涉及到一些探索性分支本身)

  • 然后构造一个提交序列,如果你知道你一直在做什么的话,你会首先构造这个提交序列
这是最重要的部分。这才是专业的、可出版的作品。让人扫兴的是,git的意义至少与之前的混乱部分相同


1哈哈哈,他说的是“git方式”,好像只有一个LOL一样,你需要弄清楚如何处理未跟踪和/或忽略的文件

此外,您不能处于冲突合并的中间。

对于所有这些,有一个简单的解决方案(使用不同的工作树,可能来自不同的克隆,或者如果您的git足够新,也可能来自
git工作树)。如果这不是出于某种原因,这里有一些事情要考虑。让我们假设一个假设的例子,但是展示一些现实世界的问题。假设您在repo
project
,当前在分支
dev-a

$ cd project
$ git status
On branch dev-a
You have unmerged paths.
  (fix conflicts and run "git commit") ...
在这种情况下,你真的被卡住了。在此处执行的任何操作都将失去部分合并状态。如果在合并状态中没有什么重要的内容,您可以运行
git merge--abort
停止合并,并抛出冲突索引,现在我们回到前面的情况。让我们看看Git是否认为一切都干净

$ git merge --abort
$ git status
On branch dev-a
nothing to commit, working tree clean
显然一切都很干净。但是等等

$ cat foo
I am a foo
$ git checkout dev-b
Switched to branch 'dev-b'
$ git status
On branch dev-b
Untracked files:
  (use "git add <file>..." to include in what will be committed)

    foo

nothing added to commit but untracked files present (use "git add" to track)
未跟踪和/或忽略的文件现在将显示为
UU
(在短输出中,长输出如前所示)

如果您只想删除被忽略的文件,可以使用带有
-x
选项的
git clean
(除了任何常用选项之外)

如果您想先保存它们,可以使用
git stash-a
。隐藏代码将进行三次提交,而不是通常的两次;第三次提交将保存未跟踪和忽略的文件。(请注意,
git stash-u
在第三次提交中仅保存未跟踪的文件,而不是忽略的文件。)保存文件后,隐藏代码将删除它们,留下一个干净的工作树(如
git clean-fdx

请注意,在一个分支(如
dev-a
)中被忽略(因此未被跟踪)的文件可以不被忽略,因此在另一个分支(如
dev-b
dev-c
)中未被跟踪或跟踪(但不能同时跟踪)。如果文件
foo
dev-a
中被忽略,并且您切换到
dev-b
它将变得未跟踪,正如我们所看到的。但是如果它在
dev-a
中被忽略,并在
dev-c
中被跟踪,该怎么办

$ git status --short --ignored
!! foo
$ git checkout dev-c
Switched to branch 'dev-c'
$ cat foo
I am a foo
$ git checkout dev-a
Switched to branch 'dev-a'
$ cat foo
cat: foo: No such file or directory
文件
foo
dev-c
中被跟踪,在
dev-a
中被忽略,因此当我们从
dev-a
切换到
dev-c
时,它会被删除(因为这是从
dev-c
的提示提交更改为
dev-a
所需要的):

这里还有一个非常棘手的案例。请记住,
foo
dev-a
的(提交提示)中被忽略,在
dev-b
中未被跟踪,并且由
dev-c
中的
I am a foo\n
组成。正如我们刚才看到的,从
dev-a
切换到
dev-c
提取了
dev-c
的版本。无论我们在其中添加了什么,这都是正确的:

$ git status --short --ignored
!! foo
$ git checkout dev-c
Switched to branch 'dev-c'
$ cat foo
I am a foo
$ git checkout dev-a
Switched to branch 'dev-a'
$ cat foo
cat: foo: No such file or directory
$ git diff --name-status dev-c dev-a
A       .gitignore
D       foo
$ git rev-parse --abbrev-rev HEAD
dev-a
$ echo 'If the foo s.its, wear it' > foo
$ git checkout dev-c
Switched to branch 'dev-c'
$ cat foo
I am a foo
$ git checkout dev-a
Switched to branch 'dev-a'
$ echo 'If the foo s.its, wear it' > foo
$ git checkout dev-b
$ git status --short
?? foo
$ git checkout dev-c
error: The following untracked working tree files would be overwritten by checkout:
    foo
Please move or remove them before you switch branches.
Aborting