git用法总结

====================================以下内容拷贝自第四期一生一芯的讲义

#查看存档信息

使用

git log

查看目前为止所有的存档.

 

使用

git status

可以得知, 与当前存档相比, 哪些文件发生了变化.

#存档

你可以像以前一样编写代码. 等到你的开发取得了一些阶段性成果, 你应该马上进行"存档".

首先你需要使用 git status 查看是否有新的文件或已修改的文件未被跟踪, 若有, 则使用 git add 将文件加入跟踪列表, 例如

git add file.c

会将 file.c 加入跟踪列表. 如果需要一次添加所有未被跟踪的文件, 你可以使用

git add -A

但这样可能会跟踪了一些不必要的文件, 例如编译产生的 .o 文件, 和最后产生的可执行文件. 事实上, 我们只需要跟踪代码源文件即可. 为了让 git 在添加跟踪文件之前作筛选, 你可以编辑 .gitignore 文件(你可以使用 ls -a 命令看到它), 在里面给出需要被 git 忽略的文件和文件类型.

把新文件加入跟踪列表后, 使用 git status 再次确认. 确认无误后就可以存档了, 使用

git commit

提交工程当前的状态. 执行这条命令后, 将会弹出文本编辑器, 你需要在第一行中添加本次存档的注释, 例如"fix bug for xxx". 你应该尽可能添加详细的注释, 将来你需要根据这些注释来区别不同的存档. 编写好注释之后, 保存并退出文本编辑器, 存档成功. 你可以使用 git log 查看存档记录, 你应该能看到刚才编辑的注释.

#读档

如果你遇到了上文提到的让你悲痛欲绝的情况, 现在你可以使用光玉来救你一命了. 首先使用 git log 来查看已有的存档, 并决定你需要回到哪个过去. 每一份存档都有一个hash code, 例如 b87c512d10348fd8f1e32ddea8ec95f87215aaa5 , 你需要通过hash code来告诉 git 你希望读哪一个档. 使用以下命令进行读档:

git reset --hard b87c

其中 b87c 是上文hash code的前缀: 你不需要输入整个hash code. 这时你再看看你的代码, 你已经成功地回到了过去!

但事实上, 在使用 git reset 的hard模式之前, 你需要再三确认选择的存档是不是你的真正目标. 如果你读入了一个较早的存档, 那么比这个存档新的所有记录都将被删除! 这意为着你不能随便回到"将来"了. (因此,不要随便用reset --hard)

#第三视点

当然还是有办法来避免上文提到的副作用的, 这就是 git 的分支功能. 使用命令

git branch

查看所有分支. 其中 master 是主分支, 使用 git init 初始化之后会自动建立主分支.

读档的时候使用以下命令

git checkout b87c (哇!还能这样用?太神奇了!)

而不是 git reset . 这时你将处于一个虚构的分支中, 你可以

  • 查看 b87c 存档的内容 (能看内容)
  • 使用以下命令切换到其它分支
git checkout 分支名
  • 对代码的内容进行修改, 但你不能使用 git commit 进行存档, 你需要使用
git checkout -B 分支名

把修改结果保存到一个新的分支中, 如果分支已存在, 其内容将会被覆盖

不同的分支之间不会相互干扰, 这也给项目的分布式开发带来了便利. 有了分支功能, 你就可以像第三视点那样在一个世界的不同时间(一个分支的多个存档), 或者是多个平行世界(多个分支)之间来回穿梭了.

#更多功能

以上介绍的是 git 的一些基本功能, git 还提供很多强大的功能, 例如使用 git diff 比较同一个文件在不同版本中的区别, 使用 git bisect 进行二分搜索来寻找一个bug在哪次提交中被引入(TODO:以后可以好好了解下这玩意儿)...

其它功能的使用请参考 git help , man git , 或者在网上搜索相关资料.

 

=====================================感谢一生一芯认真设计的讲义!

 

上一篇:Cmder


下一篇:Git简单使用方法