因为前面一篇Git的介绍已经谈论过了关于Git管理理论方面的内容,这里不赘述,直接上干货。主要谈论Git使用中一些常用命令,本文环境是Linux下的shell。


  • git init创建仓库

    首先需要在一个路径下面创建出一个文件,比如test_git,进入到test_git文件里面,pwd打印出当前路径,那么这个路径就将是创建成仓库的一个路径,使用git init test_git命令,就可以将这个文件变成一个Git可以进行管理的仓库了:

wKiom1dgAwfhglJxAABPVREv1bA301.png


  • git add添加文件

创建好目录后就可以在该目录下创建出一个文件,比如一个test_git.c文件,编辑这个test_git.c文件并保存:

#include <stdio.h>
int main()
{
    printf("hello world\n");
    return 0;
}

然后使用git add命令将其添加进仓库,运行结果什么也没有就对了;

wKioL1dgBlvDAtOvAAAD7lRdd14282.png


  • git commit提交文件

上一步只是将test_git.c文件添加进仓库,至于进一步的提交才是真正将其交给Git来进行管理:

wKioL1dgBlugOpobAAALQsNS1KA344.png

上面的显示告诉我们有1个文件被改动,添加了6行,0行被删除;


  • git status查看状态

    使用git status可以查看当前git的状态,比如刚刚将修改过的文件成功的提交了,所以当前的工作目录就为干净的,也就是并没有什么改动,如果有改动就会显示:

wKiom1dgBUnSGFisAAAHst1qvRg143.png


  • git diff查看修改情况

    这时候如果在test_git.c中添加进去一句话并保存:

printf("Hi,I'm just a test\n");

使用git diff命令可以查看修改的情况,diff就是difference:

wKioL1dgBlzie6IOAAATDCW5pnY716.png

上面用不同的颜色显示出来被修改的内容,且显示为添加了一行;


  • git log显示日志

    将上面改动的内容进行再次的提交,并用git log命令可以查看从最近到最远提交的日志情况:

wKiom1dgCsWh7ry7AABgLMFKmWQ123.png


  • git reset回退

    如果不向使用当前的版本,想要恢复上一个或者以前的某一个版本,就可以使用git reset --hard HEAD^命令,HEAD表示当前版本,HEAD^表示上一个,HEAD^^表示上上个,而上面第100个则表示为HEAD~100:(看不清请戳大图,戳戳戳就对了)

wKioL1dgEXOTw152AAD9GI55dtw540.png


  • git checkout -- filename撤销修改

  1. 如果在当前工作区想要撤销掉已经修改的内容,可以使用git checkout -- filename,这里就不再截图显示了,请自行实践;

  2. 而如果已经将修改的内容给提交到了暂存区,就需要使用git reset HEAD filename来将该文件从暂存区回退到工作区,然后再使用git checkout -- filename命令;

  3. 如果已经执行了git commit将文件交给了Git分支管理,可以使用上面的版本回退命令撤销提交;

  4. 要是还有如果,已经将版本推送到了远程库怎么办,没救了......


  • git rm filename删除文件

    如果想要删除工作区中已经被提交过的一个文件,使用普通的shell命令rm是不能够的,应该使用git rm filename来进行删除,同时还要用git commit命令来进行提交同步;


  • git remote add origin git@github.com:name/repository_name.git关联远程库

    GitHub网站是提供Git仓库托管服务的,可以将本地的仓库上传到这个网站中变成一个远程仓库,这样的话,就算本地所有数据全部都丢失也仍然可以从之前保存过的远程库中获取;但是在这之前,Git是支持SSH协议的,也就是说为了安全起见,必须设置相应的推送密码好让远程库能够识别到,因此,需要如下命令:

ssh-keygen -t rsa -C "youremail@example.com"    //执行过程一路回车使用默认就好

这样的话就会在用户主目录下多出一个.ssh的隐藏目录,id_rsa时私密钥匙不可泄露,将该目录下面的id_rsa.pub里面的内容复制粘贴交给GitHub账号里面Personal settings下面的SSH keys并保存就可以啦:

wKioL1dgw0_xbRVIAAAz-_HiM50563.png

接下来就可以在GitHub中创建出一个repository远程库来同步本地的数据,因为方便观察和使用,最好将二者的名字相同,然后再使用上面那一长串命令(其实我本来已经写了一遍,无奈断网没保存,再写一遍心好累T_T)将本地Git与GitHub的远程库进行关联,其中,origin是默认的远程库名,name是GitHub账户名,后面的repository_name就是在GitHub上创建出的仓库名;运行完命令后什么都没有就对了;之后再使用git remote命令就可以查看远程库:

wKioL1diZMiyBaPrAAAREzPQCzw665.png


  • git push (-u) origin master向远端推送

和远端关联后,就可以向远程库推送文件数据了,使用git push命令,加上-u选项表示不仅会将本地master分支的内容推送至远程新的master分支,还会使二者关联起来,这样以后再进行推送的话就简单些:

wKiom1diajzRfbFEAABi-Z9qYQQ037.png

如上表示推送成功,这时候打开GitHub的仓库test_git会发现内容和本地的一毛一样,这样的话就可以将本地的文件放入远程管理,就算电脑都格式化也不怕啦;


如果在团队合作中多人同时推送自己对文件的修改,可能会推送失败,因为会产生冲突,这样的话就需要使用git pull试图合并,如果合并也有冲突,那就需要解决冲突,下面有介绍,然后再推送;


  • git clone git@github.com:name/repository_name.git从远程克隆文件

既然可以将数据送至远程库存储,那么如果想要拿到远程库中的数据也是可以的,使用如上命令,就可以在本地得到远程库中的文件了;其中,name同样是GitHub账户名,repository_name是要克隆的仓库名:

wKiom1dia6TisbwEAAAQlF7EmpA065.png

上面表示从远端成功克隆完成,这时候打开本地工作区,就会发现里面的内容和远程库中一毛一样了,这可以用于多人协作完成同一项作业;


  • git checkout -b branch_name创建并切换到该分支

分支是Git中很强大的一个功能,具体介绍及用途请参考博客《初涉Git心得》,这里直接介绍一系列的命令;上面的命令表示创建一个分支并切换到该分支工作,git branch branch_name表示创建一个分支,如果不加-b选项只表示切换到该分支,git branch表示查看当前分支;需要注意的是,在当前分支上工作添加或者推送文件并不会影响其他分支;

wKiom1dibkmAwh1qAABKoEC2Wnw548.png


  • git merge branch_name合并分支

如果一个分支完成任务后想要合并起来,使用如上命令branch_name是想要合并分支的内容;需要注意的是,如果要合并的两个分支内容有冲突,比如两个改的地方相同内容相似,就需要手动解决冲突才能合并;合并完成后如果想要删除分支可使用git branch -d branch_name命令;git bransh -D branch_name命令可用于强行删除还未合并的分支;

wKiom1dicWDAhuMMAAAK7oaEsCs946.png

上面告诉说产生了冲突,这时候打开产生冲突的文件就如下面所示:

wKioL1dicqmjgXHcAAAKvGs8g6g293.png

这时候需要手动解决,决定要怎么改动,解决完毕之后保存,再进行添加提交,就OK了;


  • git stash保存当前工作现场内容

如果当前正在做一个作业,这时候又要马上着手修另外一个作业的bug,但是当前的作业还不能提交怎么办,使用git stash命令可以将当前工作区的内容保存起来,当解决完毕之后再返回来就可以使用git stash apply恢复但是不删除stash的内容,而git stash drop可删除;git stash pop可恢复工作内容同时删除stash内容;

wKioL1didSzhTor8AAAjwNQwa-4209.png


  • git tag <name>打标签

发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。

Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。

如果在命令中加上-a选项指定标签名,-m选项指定标签的说明文字,-s表示用私钥签名一个标签,-d选项给删除一个标签;如果在命令的后面加上版本的ID就是在某个版本上打特定的标签,git tag查看所有标签,git show tag_name查看标签信息;

wKioL1dieZKjnzOjAAAfKJZb61w178.png


如果想要将标签同样推送至远程库,使用git push origin tag_name命令就行了,如果加上--tags选项则会推送所有尚未推送的标签:

wKioL1dieZmicsQRAABrG1w6GX4526.png




    其实Git的强大之处还远远不止这些,比如还有用户可以自己配置Git来使其更加方便自己使用,更改命令更改颜色配置之类的;只是如果初涉Git并且只是想将其当做托管自己源代码的一个平台掌握这些基本的命令就差不多了,如果想要熟练使用还是需要多加练习的。



如有不妥当的地方,请多指教。

《完》