深入Git开发(Git仓库之stash操作、移动、rename和删除操作详解)

上一章Git教程请查看:Git push推送和update更新操作
这一章我们详细讨论git仓库的stash操作、移动mv操作、rename操作和删除rm操作。
1、stash操作假设你正在为产品实现一项新功能,你的代码正在进行中,突然客户要求升级,因此你必须将新功能搁置几个小时。你不能提交部分代码,也不能放弃所做的更改,因此你需要一些临时空间,你可以在其中存储部分更改,并在以后提交它。
在Git中stash操作将获取已修改的跟踪文件、分段更改,并将其保存在未完成的更改堆栈中,你可以随时重新应用它们。

$ git status -s

现在你想切换新分支解决用户升级的问题,但是你不想提交你一直在进行的工作,这样就可以保存更改。要将新的存储区推入堆栈,请运行git stash命令。
$ git stash

【在主服务器上保存了工作目录和索引状态WIP:xx添加了my_strcpy函数
HEAD现在位于xx添加了my_strcpy函数】
现在你的工作目录很干净,所有更改都保存在堆栈中。让我们用git status命令验证它。
$ git status -s

现在你可以安全地切换分支并在其他地方工作,我们可以使用git stash list命令查看隐藏的更改列表。
$ git stash list

假设你已经解决了客户升级的问题,并且又回到了新功能中寻找未完成的代码,只需执行git stash pop命令,从堆栈中删除更改并将其放置在当前工作目录中即可。
$ git status -s$ git stash pop

2、移动mv操作顾名思义移动操作将目录或文件从一个位置移动到另一个位置,现在UserA决定将源代码移至src目录,修改后的目录结构将显示如下:
$ pwd$ ls$ mkdir src$ git mv string.c src/$ git status -s

为了使这些更改永久生效,我们必须将修改后的目录结构推送到远程仓库,以便其他开发人员可以看到这一点。
$ git commit -m "已更改目录结构"$ git push origin master

【深入Git开发(Git仓库之stash操作、移动、rename和删除操作详解)】在UserB的本地仓库中,执行拉操作之前,它将显示旧的目录结构。
$ pwd$ ls

但是在pull操作之后,目录结构将得到更新。现在UserB可以看到src目录和该目录中存在的文件。
$ git pull$ ls$ ls src/

3、rename操作到目前为止UserA和UserB都使用手动命令来编译他们的项目,现在UserB决定为其项目创建Makefile,并为文件“ string.c”指定一个适当的名称。
$ pwd$ ls$ cd src/$ git add Makefile$ git mv string.c string_operations.c$ git status -s

Git在文件名前显示R,以表明该文件已被重命名。
对于提交操作,UserB使用了-a标志,该标志使git commit自动检测修改后的文件。
$ git commit -a -m 'Added Makefile and renamed strings.c"

提交后,他将所做的更改推送到仓库。
$ git push origin master

现在其他开发人员可以通过更新其本地仓库来查看这些修改。
4、删除rm操作UserA更新了本地仓库,并在src目录中找到了已编译的二进制文件,查看提交消息后他意识到UserB添加了已编译的二进制文件。
$ pwd /home/tom/project/src$ ls$ file string_operations$ git log

VCS仅用于存储源代码,而不用于存储可执行二进制文件,因此UserA决定从仓库中删除此文件,为了进行进一步的操作,他使用了git rm命令。
$ ls$ git rm string_operations$ git commit -a -m "Removed binary"

提交后就可以将所做的更改推送到仓库。
$ git push origin master

    推荐阅读