V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
xiaoming1992
V2EX  ›  git

git 切换分支后,如何恢复至原来干净的工作区?

  •  
  •   xiaoming1992 · 2020-01-13 11:13:55 +08:00 · 4568 次点击
    这是一个创建于 1781 天前的主题,其中的信息可能已经有所发展或是发生改变。
    // branch: master
    content-of-master
    
    // branch: issue-53
    content-of-master-and-addition-of-issue-53
    

    现在我从 issue-53 切换回 master, 想回到原来干净的工作区( working directory ), 是执行 reset 吗?

    18 条回复    2020-01-13 21:08:32 +08:00
    wqshare
        1
    wqshare  
       2020-01-13 11:19:38 +08:00
    git reset --hard HEAD
    sbw
        2
    sbw  
       2020-01-13 11:20:22 +08:00
    commit 到第二个分支然后 checkout 回去,或者直接 checkout 回去然后 checkout -- . 撤销修改或者 stash push 保存临时修改再 checkout 回去或者 checkout 回去再 reset 再 checkout -- .
    fzhyzamt
        3
    fzhyzamt  
       2020-01-13 11:22:00 +08:00
    是在 issue-53 写的代码,没有提交,然后切换到 master 分支吗?
    如果不想要这些代码,git reset --hard HEAD,注意这是个无法回滚的操作,谨慎执行
    或者暂存起来 git stash save
    wqshare
        4
    wqshare  
       2020-01-13 11:22:20 +08:00
    上面是重置已加入版本管理的文件,对于没有加入的文件,比如一些临时文件等,再加上:git clean -d -x -f (加上-n 可以预览)
    xiaoming1992
        5
    xiaoming1992  
    OP
       2020-01-13 11:40:07 +08:00
    @fzhyzamt 已经提交了,但是切换回 master 分支后,希望在工作区移除这些新增的内容,让 master 的工作区回复到原来的状态
    msg7086
        6
    msg7086  
       2020-01-13 11:43:33 +08:00
    你去其他分支的时候,原分支管理的文件本来就会被替换 / 删除掉,不需要手动移除。
    只有未受管理的文件才会留下。
    zyq2280539
        7
    zyq2280539  
       2020-01-13 11:46:52 +08:00
    git pull --rebase
    git reset --hard
    git clean -d -f
    xiaoming1992
        8
    xiaoming1992  
    OP
       2020-01-13 11:48:16 +08:00
    @msg7086 我菜 b 了,原来只要添加到提交就行了,我原来是仅一部分提交了,还有一部分没提交,我只看到没提交部分还存在。。。

    0202 年第一次用这些功能的我好像有点捞。。。
    KuroNekoFan
        9
    KuroNekoFan  
       2020-01-13 12:10:52 +08:00
    我看了下你的问题,多数都在 StackOverflow 上有现成的回答
    dswyzx
        10
    dswyzx  
       2020-01-13 12:33:44 +08:00
    git stash 贮藏了解一下.
    将本地不想提交的或者暂时搞一半的暂存起来

    git reset 是不能恢复的.不要轻易使用
    xiaoming1992
        11
    xiaoming1992  
    OP
       2020-01-13 13:56:05 +08:00
    @KuroNekoFan #9 我看了下你的问题,多数都在 StackOverflow 上有现成的回答
    我创建的主题一共有 40 个左右,我感觉除了本问题和 [浏览器是怎么处理.html 文件的缓存的] ,我的其他问题不怎么符合 [在 StackOverflow 上有现成的回答] 吧?
    hlx
        12
    hlx  
       2020-01-13 14:52:33 +08:00
    只要是 commit 过的都不会丢嘎, 所以随便 reset --hard, 不行 git reflog 找回嘎
    hlx
        13
    hlx  
       2020-01-13 14:55:42 +08:00
    hlx
        14
    hlx  
       2020-01-13 14:59:25 +08:00
    @fzhyzamt
    @dswyzx
    可以撤销, 可以撤销, git reflog 了解一下, 只要是 commit 过的都可以找回,
    廖大大的 Git 教程搞一波
    no1xsyzy
        15
    no1xsyzy  
       2020-01-13 15:25:34 +08:00   ❤️ 1
    @hlx reflog 不保证时效啊
    hlx
        16
    hlx  
       2020-01-13 15:41:18 +08:00
    @no1xsyzy 好吧, 长见识了, 我这个野生程序员又...
    SjwNo1
        17
    SjwNo1  
       2020-01-13 15:48:08 +08:00
    切回到 master 貌似不会影响
    SoloCompany
        18
    SoloCompany  
       2020-01-13 21:08:32 +08:00
    一般 moving HEAD 不用做任何事情
    只有两个 HEAD 的 gitignore 不一致的时候可能会导致切分支后不干净
    那么如果那些遗留的内容确认是不重要的话, 可以使用 clean -f -d 清理
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3649 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:11 · PVG 08:11 · LAX 16:11 · JFK 19:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.