Git Reset
有时候,你可能想要撤销 Git 操作。通常,git reset 就是你需要的命令。但是,使用 git reset 可能会非常复杂,取决于你的撤销操作。如果本文没有提到你需要的,查看 git reset 官方文档。
假设,你正在进行一个项目,想要取消所有的改变,返回到最近一次的提交,命令如下:
$ git reset –hard HEAD
–hard flag 将指定提交(上例中,HEAD)中的任意内容放入工作目录和缓存区内。因为 HEAD 是最近一次提交,所以我们没有做任何改变。运行 git status,会看到提示没有需要提交的。
还有其它一些 git reset 使用的 flag。假设你想要回滚你的项目到多个提交之前,但是想要保存没有提交的改变,尝试下面的:
$ git reset –soft 3ce072c72d948abfa
当然,替换为你自己需要的 hash。–soft flag 将保存你的改变在工作目录和缓存区。换句话来说,最新的提交将会是你选择的提交。
还有很多情况,你可以使用 git reset。如果你认为需要这个名利概念的功能,查看文档。
Git Checkout
我们之前就提到过 git checkout 命令:用于切换分支。但是还有更多的特性。比如使用 -b flag 同一时间,建立并切换到新分支:
$ git checkout -b newBranchName
Switched to a new branch ‘newBranchName’
git checkout 也可以进行回滚撤销工作。git reset 回滚整个提交,而 git checkout 可以回滚单个文件。回滚在缓存区内的文件:
$ git checkout — file.ext
如果需要回滚提交中的文件,替换指定提交的指针,如下所示:
$ git checkout HEAD file.ext
$ git checkout master~2 file.exe
Git Diff
另外一个很有用的 Git 命令是 git diff。使用这个命令找出两个文件,提交或分支之间的改变。假设你想看自从上一次提交后工作目录都有什么改变,可以执行如下命令:
$ git diff
如果只是想看一个文件的改变,添加文件名作为参数:
$ git diff index.html
如果想要比较最新提交和缓存区内的文件,使用 –cached flag。
$ git diff –cached
$ git diff –cached index.html
比较工作目录和一个提交,使用想要比较的提交的指针,代替上例中的 –cached flag。
$ git diff be96dbeab1
$ git diff HEAD^2 index.html
也可以使用 git diff 比较分支。将两个分支名作为参数,两个分支名中间为两个 “.”:
$ git diff master..otherBranch
这样 Git 将会 diff 两个分支的最新提交。如果需要 diff otherBranch 分支和 master 主分支,在分支名间加入三个 “.”。当然,使用你的分支名。
$ git diff master…otherBranch
Git Stash
有一个有趣的情景:假设你正在编写新特性,但是发现代码中有 bug。而这个bug 与新特性无关,你想要 fix 这个 bug 再继续开发新特性。但是如何处理为新特性写的代码的改变?这里就是 git stash 的用武之地!
git stash 就像是临时提交。当你想要隐藏一些改变,首先将这些改变加入缓存区,再运行下面的:
$ git stash
在主分区,保存工作目录和索引状态 (index state):
HEAD is now at 3d0b0a4 other commit
你会得到一个跟上面很相似的信息,告诉你在特定分支正在进行的工作已经保存。
当你提交过 bug-fix 之后,你可以从 stash 中取出之前的改变。
$ git stash apply
这样会将 stash 中的内容放回缓存区,同时会得到一个很象 git status 的信息。
你可以进行多次 stash,使用 list 命令查看所有的 stashes:
$ git status list
stash@{0}: On master: started form on contact list
stash@{1}: On master: README changes
在这个例子中,有两个 stashed 项。但是看到了清晰的 stash message 了嘛?如果需要 stash 多次,描述信息会让你清楚你的项目状态。使用 save 命令来添加 stash message:
$ git stash save “message here”
如果想要将特定 stash 放入缓存区,使用 stash 序号名称,在 list 命令看到的每行开头的信息;如果是将上例中 README 文件放入缓存中,运行如下命令:
$ git stash apply stash@{1}
在使用Git进行push的时候,有可能遇到无法push内容.解决办法请参考:http://blog.haohtml.com/archives/12256
[来源:http://blog.haohtml.com/archives/11464]
Sorry, the comment form is closed at this time.
No comments yet.