Git在Linux上的基本使用
设置
首先安装 git :
sudo apt-get install git
这里不使用sudo的话也可以使用root账户登陆,但是一般应避免使用root(在win下是administrator)权限登录。这是为了安全,防止误操作和权限滥用。(如果想要深入了解的话,可以自行查阅资料)
git config --global user.name "Zhang San" # your name
git config --global user.email "zhangsan@foo.com" # your email
git config --global core.editor vim # your favourite editor
git config --global color.ui true
经过这些配置, 你就可以开始使用 git 了。
第一次在某个实验/项目中使用 git时 , 首先需要切换到实验/项目的目录中, 然后输入
git init
进行初始化。
不然会出现fatal: 不是 git 仓库(或者任何父目录):.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模式之前, 你需要再三确认选择的存档是不是你的真正目标. 如果你读入了一个较早的存档, 那么比这个存档新的所有记录都将被删除! 这意为着你不能随便回到"将来"了.
分支功能
当然还是有办法来避免上文提到的副作用的, 这就是 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在哪次提交中被引入等
其它功能的使用请参考 git help , man git , 或者在网上搜索相关资料.