首页 > 解决方案 > 是否可以从 master 创建的分支中获取更改作为本地更改返回到 master?

问题描述

所以如果我在master做:

git checkout -b my-branch

并在那里进行几次提交+推送。然后我做:

git checkout master
git pull

我现在可以以某种方式将my-branch中的这些更改作为本地更改来掌握,就像git stash apply在做之后使用一样git stash吗?

编辑:通过本地更改,我的意思是如果我编辑某些内容或从存储中获取工作区中的文件已编辑,待更改但未提交。本地更改没有提交历史记录或任何内容。只需更改本地文件。如果我提交并将“本地”更改推送到 master,我的分支将不会有任何提交历史记录。

标签: git

解决方案


该命令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的建议使用。


推荐阅读