Git学习

作者: 萨莉兔 | 来源:发表于2020-02-14 15:49 被阅读0次

测试的时候经常需要切换分支、拉代码,但是如果当前分支本地有修改的时候,你直接切换分支是git是会报错误信息的。在这里总结下以下几种常见处理办法:

当本地需要切换到其他分支时,可能会出现两个情况:

1)本地对当前分支没有任何修改,那么可以直接用命令切换分支,例如切换到dev分支

git checkout dev

2)本地对当前分支有进行过修改,并且没还有保存。这时候你去切换分支,是会报错的

error: Your local changes to the following files would be overwritten by checkout : xxxx

Please commit your changes or stash them before you switch branches

所以你要么放弃本地修改,要么保留当前分支修改。

2.1)如果放弃本地修改

方法(1)通过 git checkout -f 命令强制切换分支

git checkout -f dev        //强制切换到dev 分支,放弃当前分支的修改

方法(2)回退到以前以前某次提交时的代码,再切换

如果当前分支不需要目前添加的任何修改,可以使用 git log 查看当前分支的提交记录。再通过 git reset --hard 命令将当前分支回退到前一次提交时的数据,使用前请保证新增的修改是可丢弃的。

git log  //当前分支的提交记录

通过 git reset --hard 命令回退到某一次提交的版本,上述命令只需要使用特定提交的哈希值的开始若干位作为参数,即你想回退到哪一次提交时的哈希值。

git reset --hard  a13f52f3        //当前分支数据回退到哈希值开始部分为 a13f52f3 的提交的数据

回退后,当前分支就是历史版本的代码,未有任何修改,这时候可以直接通过 git checkout 命令切换到其他分支,而不会再产生报错。

git checkout dev

2.2)如果保存本地修改

 另外一种进行切换的选择是先将当前分支的修改保存,再切换到其他分支,这样在其他分支的任务完成后,重新切换至当前分支时,可以继续当前分支的工作。

方法(1)直接提交当前分支

  最简单粗暴的方法即通过 git commit 命令将当前分支的修改进行提交。首先通过 git status 命令查看当前分支各个文件的状态,git status 命令还会显示不同文件状态下 git 可执行的命令,用户可以直接参考。

git status    //当前分支各文件的状态

通过 git add 命令将修改后的文件转化为 staged 状态,即文件的修改将处于 Changes to be committed 状态,再通过 git commit 命令将本分支的修改提交。

git add test.txt    //将此时的 test.txt 文件添加至 Changes to be committed 状态

在所需的修改均加入 Changes to be committed 状态后,可以通过 git commit 命令将本分支的修改提交。

git commit -m"description for this commit"       //提交本次修改

方法(2)把当前分支修改的内容暂存起来

在开发中,可能遇到需要切换到其他分支进行处理的情况。但是对于当前分支的修改可能并不足以达到需要进行一次提交的程度,这时候更合适的方案是将当前分支修改暂存起来,然后切换到其他分支进行工作,待其他分支的任务完成后,再切换回本分支,并将暂存的方案恢复,继续开发。

git 中提供 git stash 命令来完成上述功能,也就是上文提到的错误提示中 "Please commit your changes or stash them before you switch branches" 中所提到的 stash 修改的方案。

暂存修改

通过 git stash 命令将当前分支的修改暂存。经过 git stash 命令暂存修改的数据后,再使用 git status 命令可以看到文件的状态均处于未修改的状态( 而不再是修改未提交状态 )。

git stash  //暂存本分支的修改

你执行这个git stash 命令后,会显示对应的 "Saved working directory and index state WIP on master :xxxxxxx" 信息。当以多次使用 git stash 命令,暂存的状态会以栈的形式存放。

查看暂存信息

可以通过命令 git stash list 查看已经暂存的数据。 可以看到暂存的数据通过 stash@{n} 的形式索引已经存储的修改数据。

git stash list  //显示所有 stash 的数据

恢复修改

当在其他分支的任务完成切换回当前分支后,可以使用 git stash apply 命令恢复之前被暂存的数据。

git stash apply  //恢复最近一次暂存的修改

git stash apply stash@{2}  //恢复索引 stash@{2} 

对应的暂存的修改,可以通过 git stash list 查看索引

git stash list 

这里需要注意的是,通过 git stash apply 命令只会将暂存的数据恢复至 "Changes not staged for committed" 状态,即使之前修改状态中已经有文件处于 staged 状态( Changes to be committed ).为了 git 能够将文件尽可能恢复至暂存之前的状态,可以加入 --index 参数。

git stash apply --index   //在恢复暂存数据时尽量恢复至原状态( 已经 staged 状态的文件仍恢复为 staged 状态 )

删除修改

可以通过 git stash pop 或者 drop 命令删除对应的缓存数据。

git stash drop stash@{1}     //删除 stash@{1} 分支对应的缓存数据

git stash pop  //将最近一次暂存数据恢复并从栈中删除(常用)

git stash 将用户做过的修改存放在本次 git stash 产生的暂存数据中,并将已经修改的文件恢复至未修改状态。当用户恢复暂存数据时,则将上述修改应用到当前分支上。

将当前分支的修改通过 git stash 保存,此时当前分支恢复至未被修改之前的状态,而修改被 git stash 以栈的方式保存,可通过索引的方式访问。当在其他分支完成任务后,再切换回本分支,此时通过 git stash apply 将被暂存的修改应用到当前分支,则当前分支的数据即被恢复至离开当前分支前的状态。

相关文章

  • Git+node.js+TDD

    目录 Git学习 node.js学习 用Nodejs和Git完成TDD编程 Git学习 Git是什么Git是一款免...

  • Git 学习笔记

    ----------------- Git 学习 ------------------ Git 简介 Git...

  • git 入门

    git 入门学习笔记----3个入门命令:git init、git add、git commit -v 学习场景(...

  • git技术,GitHub、GitLab

    git学习 Git教程(小白快速入门版) Git教程(简化版) git详细学习 Gitlab的管理使用手册git初...

  • Git常用命令与学习总结

    安装Git Git的下载地址:Git官网下载地址 学习网址 git 学习笔记- Book 在线练习地址 基础常用指...

  • Git学习之思维导图

    Git学习之思维导图 Git学习之思维导图

  • git记录

    Git Magic图解gitgit 学习笔记git游戏(学习)1、消除文档路径中文乱码git config --g...

  • git资源学习

    git资源学习 Git详解之一 Git起步 Git详解之二 Git基础 Git详解之三 Git分支 Git详解之四...

  • Git入门学习资源

    Git入门学习资料 廖雪峰 Git教程 Git官网 Pro Git git 简明指南 github-git-che...

  • 2018-04-18

    git学习小结 关于git init,git add,git commit 用法总结 1.首先配置git 全局配置...

网友评论

      本文标题:Git学习

      本文链接:https://www.haomeiwen.com/subject/ihgdfhtx.html