说我在掌握,我想保存一些更改(修改和未跟踪的文件)供以后但不使用stash命令(我习惯了stash
和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
Changes not staged for commit: deleted: b.txt
→为什么git看到在另一个分支上做出的更改?分段区域(索引)不是每个分支区域吗?
→为什么git认为删除是一个变化,因为它甚至没有被提交?
干净的
clean -fd
命令..
不,这是行不通的,因为即使在master上,文件也不会被解开。
使用
reset
命令(使用--HARD
或之后删除文件)。
不,从暂存区域删除(并丢失)文件(正如预期的那样)。我以为我知道(在基本层面)git分支是如何工作的......但它似乎没有..那么我怎样才能在每个分支的基础上进行修改?
我知道我可以通过存储或实际提交更改来实现我想要的。
关于藏匿我只是害怕失去变化与偶然的pop
。
关于实际提交,我只是不想提交处于中间状态且根本没有准备好的启动修改。
事实上,我可以然后--amend
承诺..也许这是唯一的解决方案..
谢谢你的精力......
分支确实只在提交级别,因为分支只是提交的指针。
暂存只是选择将包含在提交中的更改的过程。它完全不知道当前检出的分支。
如果你的提交足够小而频繁,那么存放不应该吓到你,因为你只会暂时保留这些存储。在更长的时间内,我确实会创建一个提交然后修改它,或者创建一堆提交然后在我认为合适的时候进行rebase。
在步骤4和步骤5之间,您应该已提交永久记录存储库中的分阶段更改。除此之外,你的方法似乎合情合理。
这种变化不仅仅是在另一个分支上演吗?
分段区域(索引)不是每个分支区域吗?
不,只有一个指数。它不是特定于特定分支。
6.从现在开始如果我想回到主分支的先前状态
如果您在步骤4之后进行了提交,则提交图将如下所示:
...--o--o--A [master]
\
B [branch]
其中A
是在步骤4中存在的master
分支的最新提交,而B
是您在步骤4之后创建的新提交,而branch
分支被检出。
提交B
将包含b.txt
的新内容,而提交A
则不会。
现在,第6步将成为检查分支master
的问题。