与其他技术相比,Git应该拯救了更多开发人员的饭碗。只要你经常使用Git保存自己的工作,你就一直有机会可以将代码退回到之前的状态,因此就可以挽回那些你深夜里迷迷糊糊犯下的错误。
尽管这么说,Git的命令行界面可是出了名的难掌握。接下来,就给大家介绍7个小技巧,最大限度发挥Git的作用。
通常,大部分时间我们都只会用到 add
、 commit
、 branch
和 push
/ pull
这 些命令。大部分人熟悉这套只往一个方向运转的工作流。你们有没有想过,如果自己往仓库中添加了错误的文件,或是将代码提交到了错误的分支,而且提交信息还 写错了的话,自己怎样才能取消之前的操作?如果你也是按照上面漫画中所描绘的一样操作的(即删除本地项目文件夹,再重新下载仓库),那么你就有必要了解下 面这些Git使用技巧了。
1. 修改错误的 提交信息
提交信息很长时间内会一直保留在你的 代码库 中,所以你肯定希望通过这个信息正确地了解代码修改情况。 下面这个命令可以让你编辑最近一次的提交信息,但是你必须确保没有对 当前的代码库 做修改,否则这些修改也会随之一起提交。
<span>$ </span><span>git</span><span> commit </span><span>--</span><span>amend </span><span>-</span><span>m </span><span>”</span><span>YOUR</span><span>-</span><span>NEW</span><span>-</span><span>COMMIT</span><span>-</span><span>MESSAGE</span><span>”</span>
假如你已经将代码提交(git commit)推送(git push)到了远程分支,那么你需要通过下面的命令强制推送这次的代码提交。
<span>$ </span><span>git</span><span> push </span><span><</span><span>remote</span><span>></span><span> </span><span><</span><span>branch</span><span>></span><span> </span><span>--</span><span>force</span>
你可以关注 Stack Overflow网站上的这条问答 , 获取更多详情。
如果你往 暂存区 中加入了一些错误的文件,但是还没有提交代码。你可以使用一条简单的命令就可以撤销。如果只需要移除一个文件,那么请输入:
<span>$ </span><span>git</span><span> </span><span>reset</span><span> </span><span><文件名></span>
或者如果你想从暂存区移除所有没有提交的修改:
<span>$ </span><span>git</span><span> </span><span>reset</span>
你可以关注 Stack Overflow网站上的这条问答 , 获取更多详情。
有时候你可能会不小心提交了错误的文件或一开始就遗漏了某些东西。下面这三步操作可以帮助你解决这个问题。
<span>$ </span><span>git</span><span> </span><span>reset</span><span> </span><span>--</span><span>soft HEAD</span><span>~</span><span>1</span>
<span>#</span><span> </span><span>对工作文件进行必要的更改</span>
<span>$ </span><span>git</span><span> add </span><span>-</span><span>A </span><span>.</span>
<span>$ </span><span>git</span><span> commit </span><span>-</span><span>c ORIG_HEAD</span>
你执行第一个命令时,Git会将 HEAD
指针后移到此前的一次提交,之后你才能移动文件或作必要的修改。
然后你就可以添加所有的修改,而且当你执行最后的命令时,Git会打开你的默认文本编辑器,其中会包含上一次提交时的信息。如果愿意的话,你可以修改提交信息,或者你也可以在最后的命令中使用 -C
而不是 -c
,来跳过这一步。
“撤销” 在许多情况下是非常有必要的——尤其是你把代码搞的一团糟的情况下。最常见的情况是,你想回到之前代码版本,检查下那个时候的代码库,然后再回到现在状态。这可以通过下面的命令实现:
<span>$ </span><span>git</span><span> checkout </span><span><</span><span>SHA</span><span>></span>
“”是你想查看的提交拥有的 哈希值 中前8至10个字符。 这个命令会使 <HEAD>
指针 脱离 ,可以让你在不 检出 任何分支的情况下查看代码——脱离HEAD并不像听上去那么可怕。如果你想在这种情况下提交修改,你可以通过创建新的分支来实现:
<span>$ </span><span>git</span><span> checkout </span><span>-</span><span>b </span><span><</span><span>SHA</span><span>></span>
要想回到当前的工作进度,只需要 检出 你之前所在的分支即可。
你可以关注 Stack Overflow网站上的这条问答 , 获取更多详情。
5. 撤销 合并
要想撤销合并,你可能必须要使用 恢复命令 回到上一次提交的状态。“合并”所做的工作基本上就是重置索引,更新working tree(工作树)中的不同文件,即当前提交()代码中与 HEAD
游标所指向代码之间的不同文件;但是合并会保留索引与working tree之间的差异部分(例如那些没有被追踪的修改)。
<span>$ </span><span>git</span><span> checkout </span><span>-</span><span>b </span><span><</span><span>SHA</span><span>></span>
当然,Git中总是有其他的实现办法,你可以查看看 这篇文章 继续了解。
假设你凑巧有一些未被追踪的文件(因为不再需要它们),不想每次使用 git status
命令时让它们显示出来。下面是解决这个问题的一些方法:
$ git clean -f -n # 1
$ git clean -f # 2
$ git clean -fd # 3
$ git clean -fX # 4
$git clean -fx
# 5
(1): 选项-n将显示执行(2)时将会移除哪些文件。
(2): 该命令会移除所有命令(1)中显示的文件。
(3): 如果你还想移除文件件,请使用选项-d。
(4): 如果你只想移除已被忽略的文件,请使用选项-X。
(5): 如果你想移除已被忽略和未被忽略的文件,请使用选项-x。
请注意最后两个命令中X的区别。
更多详情,请查看官方文档中关于 git-clean的介绍 。
删除本地分支:
<span>$ </span><span>git</span><span> branch </span><span>--</span><span>delete</span><span> </span><span>--</span><span>force </span><span><</span><span>branchName</span><span>></span>
或者使用选项-D作为简写:
<span>$ </span><span>git</span><span> branch </span><span>-</span><span>D</span>
删除远程分支:
<span>$ </span><span>git</span><span> push origin </span><span>--</span><span>delete</span><span> </span><span><</span><span>branchName</span><span>></span>
建议:要想更好地掌握Git的用法,请仔细阅读Git官方文档。