git - 是否可以从 master 创建的分支中获取更改作为本地更改返回到 master?
问题描述
所以如果我在master做:
git checkout -b my-branch
并在那里进行几次提交+推送。然后我做:
git checkout master
git pull
我现在可以以某种方式将my-branch中的这些更改作为本地更改来掌握,就像git stash apply
在做之后使用一样git stash
吗?
编辑:通过本地更改,我的意思是如果我编辑某些内容或从存储中获取工作区中的文件已编辑,待更改但未提交。本地更改没有提交历史记录或任何内容。只需更改本地文件。如果我提交并将“本地”更改推送到 master,我的分支将不会有任何提交历史记录。
解决方案
该命令git stash apply
采用隐藏的更改并将它们应用于当前工作树状态的顶部。请注意,此时没有提交或引用。我假设“本地更改”是指工作树中的此类更改。可以为分支复制此行为git restore
,如下所示:
git restore --source=my-branch --worktree -- .
让我们看看这两个命令与下图的对比:
$ git log --oneline --graph --all
* e7cea52 (my-branch) Same as in stash
| * b3d1317 (refs/stash) WIP on master: df7538f Initial commit
| |\
|/ /
| * 0f7231b index on master: df7538f Initial commit
|/
* df7538f (HEAD -> master) Initial commit
建议的git-restore解决方案应用删除和修改。新文件被添加并且未被跟踪(未添加到索引中):
$ git restore --source=my-branch --worktree -- .
$ git status -s
D old.txt
M readme.md
?? new.txt
使用git-stash时,也会应用删除和修改。唯一的区别是新文件已经暂存(添加到索引中):
$ git stash apply
$ git status -s
A new.txt
D old.txt
M readme.md
如果您想获得实际的提交(不仅仅是工作树中的更改),您可以按照@joanisgit merge my-branch
的建议使用。
推荐阅读
- verilog - case 语句和赋值如何在 system-verilog/verilog 中工作?
- spring - 如何使用 Spring Boot 在 H2 控制台中设置默认 JDBC URL 值
- c++ - boost::multiprecision::gmp_float::operator= 中的神秘堆栈溢出异常?
- php - 在续订计划之前,我如何申请和记录 Recurly 附加组件的使用情况?
- java - 将游戏分数存储到sqlite数据库java中
- c# - 使用 TimeZoneInfo 解析本地字符串日期
- python - 在我的 Python Fibonacci 程序中,时间函数似乎总是在增加
- sql - 使用超过 255 个 UNION ALL 语句修复 SQL
- android - APK 完全被多个 ABI APK 所掩盖
- sql-server - 使用 SQL 组合详细和汇总的结果