我开始研究一个新特性,在编码了一段时间后,我决定这个特性应该属于自己的分支。
如何将现有未提交的更改移动到新分支并重置当前分支?
我想重置当前分支,同时保留新功能的现有工作。
我开始研究一个新特性,在编码了一段时间后,我决定这个特性应该属于自己的分支。
如何将现有未提交的更改移动到新分支并重置当前分支?
我想重置当前分支,同时保留新功能的现有工作。
当前回答
这是告诉您使用gitstash-k的唯一答案,您需要。。。
如果您已经花了一个小时使用gitadd-p
然后决定在执行实际提交之前测试添加到索引中的内容。在这种情况下,不要使用纯数字存储!
而是:
git stash -k
这将保留索引并删除仍在工作目录中且尚未添加到索引中的其余部分。正是你想要的。
现在您可以尝试编译/测试和提交。即。
make
git commit -m 'Yay!'
然后使用
git stash pop
如果您发现它不编译,那么进行更改并添加索引和提交可能会混淆git stash pop。当涉及到合并时,它不是那么好。在这种情况下,你可能无论如何都应该提交;因此:
make
git commit -m 'Grrrr'
然后创建一个新分支,
git switch -c tmpbranch
在那里做你的工作(更改代码、进行测试和更多提交)
/* blood sweat and tears */
一旦一切正常,将其提交给新分支
commit -a -m 'Finally!'
返回到旧分支,然后使用与推到存储位置时相同的工作目录执行git存储弹出。
git checkout youknowwhatbranchyouwereonright
git stash pop
也要提交,否则无法合并tmpbranch。然后合并您创建的临时分支。
git commit -a -m 'Still working on this.'
git merge tmpbranch
/* fix collisions and commit */
现在,您可以重新设置基础,将“仍在处理这个”放在顶部,并将其余部分压缩/修复为单个注释。例如
git rebase -i
可能会给你:
pick 540623a Grrr
pick a8589d3 Still working on this.
pick d3b602c Finally
然后将其更改为:
reword 540623a Grrr
fixup d3b602c Finally
pick a8589d3 Still working on this.
最后撤销最后一次提交(“仍在处理”)
git reset HEAD~1
其他回答
更新2020/Git 2.23
Git 2.23添加了新的switch子命令,试图消除由于超负荷使用checkout(切换分支、恢复文件、分离HEAD等)而产生的一些混乱
从这个版本的Git开始,将checkout命令替换为:
git switch -c <new-branch>
行为相同且保持不变。
更新2020/Git 2.23之前
使用以下方法:
git checkout -b <new-branch>
这将使当前分支保持原样,创建并签出新分支并保留所有更改。然后,您可以在文件中暂存要提交的更改:
git add <files>
并向您的新分支机构承诺:
git commit -m "<Brief description of this commit>"
工作目录中的更改和索引中暂存的更改尚不属于任何分支。这将更改这些修改将结束的分支。
您不重置原始分支,它保持原样。<old branch>上的最后一次提交仍将保持不变。因此,您签出-b,然后提交。
我使用@Robin回答并列出我所做的一切,
git status <-- review/list uncommitted changes
git stash <-- stash uncommitted changes
git stash branch <new-branch> stash@{1} <-- create a branch from stash
git add . <-- add local changes
git status <-- review the status; ready to commit
git commit -m "local changes ..." <-- commit the changes
git branch --list <-- see list of branches incl the one created above
git status <-- nothing to commit, working tree (new-branch) is clean
git checkout <old-branch> <-- switch back
! 如果回购有多个存储,请查看要应用于新分支机构的存储:
git stash list
stash@{0}: WIP on ...
stash@{1}: WIP on ...
并通过以下方式检查各个藏匿点,
git stash show stash@{1}
或者立即检查所有储藏物:
git stash list -p
提交更改的3个步骤
假设您在GitHub上创建了一个名为featurebranch的新分支。
提取
git pull --all Pull all remote branches
git branch -a List all branches now
检出并切换到要素分支目录。您可以简单地从上面的branch-a命令的输出中复制分支名称
git checkout-b功能分支
验证
接下来使用gitbranch命令查看当前分支。它将显示前面带有*的功能分支
git branch
承诺
git add . add all files
git commit -m "Rafactore code or use your message"
在源服务器上进行更新和推送更改
git pull origin feature-branch
git push origin feature-branch
这是告诉您使用gitstash-k的唯一答案,您需要。。。
如果您已经花了一个小时使用gitadd-p
然后决定在执行实际提交之前测试添加到索引中的内容。在这种情况下,不要使用纯数字存储!
而是:
git stash -k
这将保留索引并删除仍在工作目录中且尚未添加到索引中的其余部分。正是你想要的。
现在您可以尝试编译/测试和提交。即。
make
git commit -m 'Yay!'
然后使用
git stash pop
如果您发现它不编译,那么进行更改并添加索引和提交可能会混淆git stash pop。当涉及到合并时,它不是那么好。在这种情况下,你可能无论如何都应该提交;因此:
make
git commit -m 'Grrrr'
然后创建一个新分支,
git switch -c tmpbranch
在那里做你的工作(更改代码、进行测试和更多提交)
/* blood sweat and tears */
一旦一切正常,将其提交给新分支
commit -a -m 'Finally!'
返回到旧分支,然后使用与推到存储位置时相同的工作目录执行git存储弹出。
git checkout youknowwhatbranchyouwereonright
git stash pop
也要提交,否则无法合并tmpbranch。然后合并您创建的临时分支。
git commit -a -m 'Still working on this.'
git merge tmpbranch
/* fix collisions and commit */
现在,您可以重新设置基础,将“仍在处理这个”放在顶部,并将其余部分压缩/修复为单个注释。例如
git rebase -i
可能会给你:
pick 540623a Grrr
pick a8589d3 Still working on this.
pick d3b602c Finally
然后将其更改为:
reword 540623a Grrr
fixup d3b602c Finally
pick a8589d3 Still working on this.
最后撤销最后一次提交(“仍在处理”)
git reset HEAD~1
或者:
将当前更改保存到临时存储:$git存储基于此存储创建新分支,然后切换到新分支:$git stash branch<new branch>stash@{0}
提示:使用tab键可以减少键入存储名称。