如何仅在一个分支中暂存文件?

问题描述 投票:0回答:2

说我在掌握,我想保存一些更改(修改和未跟踪的文件)供以后但不使用stash命令(我习惯了stashpop我尝试的很快)。而且由于这些更改旨在成为一项重要的更改,我宁愿在自己的分支上“保存”此启动的更改。

我怎样才能做到这一点 ?


这是一个带有意外(对我而言)结果的示例工作流程。

  1. #(master)# git status On branch master nothing to commit, working tree clean
  2. #(master)# git touch b.txt #(master)# git status On branch master Untracked files: b.txt Nothing added to commit but untracked files present
  3. #(master)# git checkout -b branch Switched to a new branch 'branch' #(branch)# git status On branch branch Untracked files: b.txt Nothing added to commit but untracked files present
  4. #(branch)# git add . #(branch)# git status On branch branch Changes to be committed: new file: b.txt
  5. #(branch)# git checkout master . Switched to a branch 'master' #(master)# git status On branch master Changes to be committed: new file: b.txt →这个改变不仅仅是在另一个分支上演吗?
  6. 从现在开始,如果我想回到主分支的先前状态,我可以: 删除此文件以删除它。所以,我希望有一个干净的主分支,但我得到以下内容: #(master)# rm b.txt #(master)# git status On branch master Changes to be committed: new file: b.txt Changes not staged for commit: deleted: b.txt →为什么git看到在另一个分支上做出的更改?分段区域(索引)不是每个分支区域吗? →为什么git认为删除是一个变化,因为它甚至没有被提交? 干净的 clean -fd 命令.. 不,这是行不通的,因为即使在master上,文件也不会被解开。 使用 reset 命令(使用--HARD或之后删除文件)。 不,从暂存区域删除(并丢失)文件(正如预期的那样)。

我以为我知道(在基本层面)git分支是如何工作的......但它似乎没有..那么我怎样才能在每个分支的基础上进行修改?

我知道我可以通过存储或实际提交更改来实现我想要的。

关于藏匿我只是害怕失去变化与偶然的pop。 关于实际提交,我只是不想提交处于中间状态且根本没有准备好的启动修改。 事实上,我可以然后--amend承诺..也许这是唯一的解决方案..

谢谢你的精力......

git
2个回答
1
投票

分支确实只在提交级别,因为分支只是提交的指针。

暂存只是选择将包含在提交中的更改的过程。它完全不知道当前检出的分支。

如果你的提交足够小而频繁,那么存放不应该吓到你,因为你只会暂时保留这些存储。在更长的时间内,我确实会创建一个提交然后修改它,或者创建一堆提交然后在我认为合适的时候进行rebase。


1
投票

在步骤4和步骤5之间,您应该已提交永久记录存储库中的分阶段更改。除此之外,你的方法似乎合情合理。

这种变化不仅仅是在另一个分支上演吗?

分段区域(索引)不是每个分支区域吗?

不,只有一个指数。它不是特定于特定分支。


6.从现在开始如果我想回到主分支的先前状态

如果您在步骤4之后进行了提交,则提交图将如下所示:

...--o--o--A [master]
            \
             B [branch]

其中A是在步骤4中存在的master分支的最新提交,而B是您在步骤4之后创建的新提交,而branch分支被检出。

提交B将包含b.txt的新内容,而提交A则不会。

现在,第6步将成为检查分支master的问题。

© www.soinside.com 2019 - 2024. All rights reserved.