Git入门:理解常用命令、本地仓库与远端仓库

快速导航

本文适用于多少接触过一点Git的朋友。

重要:本地仓库与远端仓库

git clone命令,会从远端拉下来一个完整的仓库,成为你的本地仓库;

编写/修改代码、add,都是在本地仓库进行的,不需要联网,commit也是提交到本地仓库;

最后一步push,是使用本地的commit记录,覆盖掉远端的commit记录。(覆盖是简化的说法,便于理解)

如果远端上,存在本地仓库没有的commit,Git是不允许覆盖的,这样会导致数据丢失。所以,在多人合作的时候,会出现冲突,push失败。

在简单的多人合作开发中,如大家都维护一个分支。你push前,别人是有可能commit的,因此先git pull下来远端上最新的commit记录,让本地仓库的commit记录是最新最全的,再去push就不会有冲突。

如果真的发生了冲突,执行git pull,Git会自动将你本地没有的commit拉下来,和你本地的commit合并(merge)成一个新的commit。这样你本地就有了远端所有的commit,再push即可。

此时,如果git pull失败了,大概是因为,你本地修改了文件file1,你同事也修改file1,并且push到了远端。因为你本地file1有远端没有的改动,Git在merge远端commit中的改动到你本地的时候,就不知保留哪个,然后报冲突。这时可以手动merge,将本地的改动撤销,再pull即可。

git clone

https协议: git clone https://github.com/xxx.git

  • 该协议,可以在没有ssh key的情况下,通过用户名和密码认证,克隆私有仓库

ssh协议: git clone git@github.com:xxx.git

  • 该协议,需要生成并绑定ssh key,才可以克隆私有仓库

.git 文件夹

这个.git 文件夹,是隐藏的,正常状态下不可见。它就是本地仓库,保存了所有的版本信息;
而.git所在的文件夹,就是Git的工作目录。

git log

查看该仓库所有的commit(提交)历史;

git status

查看工作目录当前状态

  • 你当前所在的分支,Ex: ON branch master;
  • 本地仓库是否有未push的提交,Ex: Your branch is ahead of 'origin/master' by 1 commit;在git pull冲突后,会显示落后远端仓库commits记录;
  • ...

git add

追踪某个新的文件,或者对旧文件的修改,使用命令git add xx_file

  • 执行add后,新文件或者改动,就被放到了staging area中,就是暂存区;
  • 暂存区:汇集新文件或改动的地方,然后一起commit;也可以add一次commit一次;
  • 旧文件:已经add过的文件
  • 如果要追踪所有文件,使用命令"git add ."

git commit

将暂存区的改动,提交到本地仓库

git push

用本地的commits记录覆盖远端仓库的commits记录,就是将本地代码推送到远端

git pull

从远端拉取拉取新的commits记录到本地,并进行merge操作;如果失败,一般是因为本地的改动和远端冲突了,Git无法merge冲突;