您的位置:首页 > 其它

Git学习笔记

2013-07-18 11:54 232 查看
git stash

git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。

git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。

git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。

git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。

关于Git Stash的详细解释,适用场合,这里做一个说明:

使用git的时候,我们往往使用branch解决任务切换问题,例如,我们往往会建一个自己的分支去修改和调试代码, 如果别人或者自己发现原有的分支上有个不得不修改的bug,我们往往会把完成一半的代码 commit提交到本地仓库,然后切换分支去修改bug,改好之后再切换回来。这样的话往往log上会有大量不必要的记录。其实如果我们不想提交完成一半或者不完善的代码,但是却不得不去修改一个紧急Bug,那么使用'git stash'就可以将你当前未提交到本地(和服务器)的代码推入到Git的栈中,这时候你的工作区间和上一次提交的内容是完全一样的,所以你可以放心的修 Bug,等到修完Bug,提交到服务器上后,再使用'git stash apply'将以前一半的工作应用回来。也许有的人会说,那我可不可以多次将未提交的代码压入到栈中?答案是可以的。当你多次使用'git stash'命令后,你的栈里将充满了未提交的代码,这时候你会对将哪个版本应用回来有些困惑,'git stash list'命令可以将当前的Git栈信息打印出来,你只需要将找到对应的版本号,例如使用'git stash apply stash@{1}'就可以将你指定版本号为stash@{1}的工作取出来,当你将所有的栈都应用回来的时候,可以使用'git stash clear'来将栈清空。

在这里顺便提下git format-patch -n , n是具体某个数字, 例如 'git format-patch -1' 这时便会根据log生成一个对应的补丁,如果 'git format-patch -2' 那么便会生成2个补丁,当然前提是你的log上有至少有两个记录。

使用场合:当前工作区内容已被修改,但是并未完成。这时Boss来了,说前面的分支上面有一个Bug,需要立即修复。可是我又不想提交目前的修改,因为修改没有完成。但是,不提交的话,又没有办法checkout到前面的分支。此时用Git Stash就相当于备份工作区了。然后在Checkout过去修改,就能够达到保存当前工作区,并及时恢复的作用。

git
reset

修复未提交文件中的错误( 重置)

如果你现 在的工作目录(work tree) 里搞的一团乱麻, 但是你现 在还没有把它们 提交; 你可以通过下面的命令, 让工作目录回到上次提交时的状态(last committed state):

$ git reset --hard HEAD

如果你只是要恢复一个文件, 如"hello.rb", 你就要使用git checkout
$ git checkout -- hello.rb
这条命令把hello.rb 从HEAD 中签 出并且把它恢复成未修改时的样子.

修复已提交文件中的错误
如果你已经做了一个提交(commit), 但是你马上后悔了, 这里有两种截然不同的方法去处理这个问题:
1 创 建一个新的提交(commit), 在新的提交里撤消老的提交所作的修改. 这种作法在你已经把代码 发布的情况下十分正确.
2 你也可以去修改你的老提交(old commit). 但是如果你已经把代码 发布了, 那么千万别这么做; git 不会处理项 目的历史会改变的情况, 如果一个分支的历史被改变了那以后就不能正常的合并.
创建新提交来修复错误
创建一个新的,撤消(revert)了前期修改的提交(commit) 是很容易的; 只要把出错 的提交(commit) 的名字(reference) 做为参数传给命令: git revert 就可以了; 下面这条命令就演示了如何撤消最近的一个提交:
$ git revert HEAD
这样就创建了一个撤消了上次提交(HEAD) 的新提交, 你就有机会来修改新提交(new commit) 里的提交注释信息.

修改提交来修复错误
如果你刚刚 做了某个提交(commit), 但是你又想马上修改这个提交; git commit 现 在支持一个叫--amend 的参数,它能让 你修改刚 才的这个提交(HEAD commit). 这项 机制能让你在代码 发布前, 添加一些新的文件或是修改你的提交注释(commit message).
如果你在老提交(older commit) 里发现 一个错误, 但是现 在还没有发布到代码 服务器上. 你可以使用git rebase 命令的交互模式, "git rebase -i" 会提示你在编辑 中做相关 的修改. 这样其实就是让 你在rebase 的过程来 修改提交.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: