说我是主人,我想保留一些更改(修改后和未跟踪的文件)以供日后使用但不使用stash命令(我已经习惯stash
和{{1}我试着很快的事情)。而且由于这些变化是一个重要的变化,我宁愿"保存"这引发了对自己分支的改变。
我该怎么做?
以下是带有意外(对我来说)结果的示例工作流程。
pop
#(master)# git status
On branch master
nothing to commit, working tree clean
#(master)# git touch b.txt
#(master)# git status
On branch master
Untracked files: b.txt
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
Nothing added to commit but untracked files present
#(branch)# git add .
#(branch)# git status
On branch branch
Changes to be committed: new file: b.txt
#(branch)# git checkout master .
Switched to a branch 'master'
#(master)# git status
On branch master
→这个改变只是上演了
在另一个分支?
从现在开始,如果我想回到主分支的先前状态,我可以:
删除此文件以删除此文件。所以,我希望有一个干净的主分支,但我得到以下内容:
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认为删除是一个变化,因为它甚至没有被提交?
使用 Changes not staged for commit: deleted: b.txt
命令清理..
不,这不起作用,因为即使在主人身上文件也不会被攻击..
使用 clean -fd
命令(使用 reset
或之后删除文件)。
不,也可以从暂存区域删除(并丢失)文件(确实如预期的那样)。
我以为我知道(在基本层面上)git分支是如何工作的......但似乎没有..那么我怎样才能在每个分支的基础上进行修改?
我知道我可以通过存储或实际提交更改来实现我想要的目标。
关于存储我只是害怕因意外--HARD
而丢失更改。
关于实际的提交,我只是不想提交那些处于中间状态并且根本没有准备好的启动修改。
事实上,我可以pop
提交..也许这是唯一的解决方案..
感谢您的精力......
答案 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
。