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

时间:2017-12-23 09:46:23

标签: git

说我是主人,我想保留一些更改(修改后和未跟踪的文件)以供日后使用但不使用stash命令(我已经习惯stash和{{1}我试着很快的事情)。而且由于这些变化是一个重要的变化,我宁愿"保存"这引发了对自己分支的改变。

我该怎么做?

以下是带有意外(对我来说)结果的示例工作流程。

  1. pop
    #(master)# git status
    On branch master

  2. nothing to commit, working tree clean
    #(master)# git touch b.txt #(master)# git status
    On branch master
    Untracked files: b.txt

  3. Nothing added to commit but untracked files present
    #(master)# git checkout -b branch
    Switched to a new branch 'branch'
    #(branch)# git status
    On branch branch
    Untracked files: b.txt

  4. Nothing added to commit but untracked files present
    #(branch)# git add . #(branch)# git status
    On branch branch

  5. Changes to be committed: new file: b.txt
    #(branch)# git checkout master .
    Switched to a branch 'master'
    #(master)# git status
    On branch master
    →这个改变只是上演了 在另一个分支?

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

    1. 删除此文件以删除此文件。所以,我希望有一个干净的主分支,但我得到以下内容:
      Changes to be committed: new file: b.txt
      #(master)# rm b.txt
      #(master)# git status
      On branch master
      Changes to be committed: new file: b.txt
      →为什么git看到在另一个分支上做出的更改?分段区域(索引)不是每个分支区域吗? →为什么git认为删除是一个变化,因为它甚至没有被提交?

    2. 使用 Changes not staged for commit: deleted: b.txt 命令清理..
      不,这不起作用,因为即使在主人身上文件也不会被攻击..

    3. 使用 clean -fd 命令(使用reset或之后删除文件)。
      不,也可以从暂存区域删除(并丢失)文件(确实如预期的那样)。

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

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

    关于存储我只是害怕因意外--HARD而丢失更改。
    关于实际的提交,我只是不想提交那些处于中间状态并且根本没有准备好的启动修改。
    事实上,我可以pop提交..也许这是唯一的解决方案..

    感谢您的精力......

2 个答案:

答案 0 :(得分:1)

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

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

如果你的提交足够小且频繁,那就不应该吓唬你了,因为你只会保留那段藏匿处。在更长的时间内,我确实会创建一个提交,然后修改它,或者创建一堆提交,然后根据我的需要进行rebase。

答案 1 :(得分:1)

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

  

这种变化不仅仅是在另一个分支中进行的吗?

  

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

不,只有一个索引。它不是特定于特定分支。

  

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

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

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

其中A是步骤4中存在的分支master上的最新提交,而B是您在步骤4之后创建的新提交,而分支{{1}签出了。

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

步骤6现在只需检查分支A