Git 切换到另一个分支而不更改工作区文件
我从GitHub克隆了一个git存储库,做了一些更改和提交;我做了很多,而且都很脏,所以它们不适合拉动请求。现在,我从Git 切换到另一个分支而不更改工作区文件,git,branch,git-branch,Git,Branch,Git Branch,我从GitHub克隆了一个git存储库,做了一些更改和提交;我做了很多,而且都很脏,所以它们不适合拉动请求。现在,我从origin/master创建了分支cleanchanges,因此它是干净的,我想在那里提交我的更改,作为一个提交,并带有一个漂亮的提交注释 当我在本地主机上时,我想切换到我的cleanchanges,但不更改文件。然后我就可以承诺了 如何在不更改文件的情况下切换分支 我想说清楚:我已经在本地主文件中提交了所有更改。没有未提交的更改。编辑:我刚刚注意到您说您已经创建了一些提交。在
origin/master
创建了分支cleanchanges
,因此它是干净的,我想在那里提交我的更改,作为一个提交,并带有一个漂亮的提交注释
当我在本地主机上时,我想切换到我的cleanchanges
,但不更改文件。然后我就可以承诺了
如何在不更改文件的情况下切换分支
我想说清楚:我已经在本地
主文件中提交了所有更改。没有未提交的更改。编辑:我刚刚注意到您说您已经创建了一些提交。在这种情况下,使用git merge--squash
进行一次提交:
git checkout cleanchanges
git merge --squash master
git commit -m "nice commit comment for all my changes"
(编辑:如果您有未提交的更改,则以下答案适用。)
只需使用git checkout cleanchanges
切换分支即可。如果分支引用相同的ref,那么在切换时,所有未提交的更改都将保留在工作目录中
只有当存储库中的某个文件在origin/master
和cleanchanges
之间存在差异时,才会发生冲突。如果您刚刚创建了分支,那么就没有问题了
和往常一样,如果你担心失去工作,首先做一份备份。Git的设计目的是,在没有事先询问您的情况下不会放弃工作。最好的选择是更改和切换分支。要切换分支,您需要一个干净的状态。因此,将它们隐藏起来,签出一个新分支,并在新分支上应用更改并提交它听起来像是您做了更改,一路上将它们提交给master,现在您希望将它们合并到一个提交中
如果是这样的话,您希望将您的提交压缩为一次提交
我不完全确定你到底想要什么,所以我不会用剧本来诱惑你。但是我建议您仔细阅读git rebase和“挤压”选项,并尝试一些方法。另一种方法,如果您想创建新提交而不是执行合并:
git checkout cleanchanges
git reset --hard master
git reset cleanchanges
git status
git add .
git commit
第一次(硬)重置会将您的工作树设置为与master
中的最后一次提交相同
第二次重置将使您的头回到原来的位置,指向cleanchanges
分支的尖端,但不会更改任何文件。现在您可以添加并提交它们
之后,如果要删除从master
所做的脏提交(假设尚未推送),可以:
git checkout master
git reset --hard origin/master
这将放弃所有新提交,将本地主分支返回到与存储库中相同的提交。Git。切换到其他分支机构
git checkout branch_name
最简单的方法如下:
git fetch && git checkout <branch_name>
git获取和git签出
为什么不干脆git重置--soft
演示:
mkdir myrepo;cd myrepo;初始化
触摸诗;git加诗;git commit-m'add poem'#first commit
git分支原件
回音香蕉>诗;git提交-am“更改诗歌”#第二次提交
回声是美味的>>诗#未老化的变化
git重置--软原稿
结果:
$git diff——缓存
差异——吉特a/诗b/诗
索引e69de29..9baf85e 100644
---a/诗歌
+++b/诗歌
@@ -0,0 +1 @@
+香蕉
$git diff
差异——吉特a/诗b/诗
索引9baf85e..ac01489 100644
---a/诗歌
+++b/诗歌
@@ -1 +1,2 @@
香蕉
+它们很好吃
但是需要注意的是,当前分支更改为原始分支。流程结束后,您仍然停留在上一个分支中,但可以轻松地git签出原始文件
,因为它的状态相同。如果您不想丢失前面的头
,则应注意提交引用,然后执行git branch-f
。git fetch&git checkout branch\u name
(“branch\u name”这里是分支的名称)
然后你会看到消息,
切换到新分支“分支机构名称”
分支“Branch\u name”设置为从“origin”跟踪远程分支“Branch\u name”。干净地切换到另一个分支cleanchanges
,保留当前工作区文件-无副作用或中间提交:
# starting from master
git switch --detach # to not move the current branch
git reset cleanchanges
git switch cleanchanges
这也可以独立于未限制的更改,甚至不会更改时间戳
要保留索引(暂存区域)并分别查看脏更改和以前清理的文件与cleanchanges
头的差异,请执行以下操作:
# starting from master
git switch --detach # to not move the current branch
git reset --soft cleanchanges
git switch cleanchanges
您不一定需要“干净状态”来切换分支。然后,您可以合并来自另一个分支的更改。我已提交所有更改。这将更改工作区文件,但未跟踪的文件除外。它将更改文件。Fetch不会更改,但签出会更改,但未跟踪的文件除外,如前所述