Git基本概念

Git将文件的状态分为三类,包括workding directory, index 和 HEAD。

  1. 任何未被git进行管理的文件成为working directory
  2. 通过git add操作将文件纳入git管理,此时称之为index/staging(临时)
  3. 通过git commit操作将转为HEAD状态

HEAD状态的文件可以传输到remote的仓库,对于从本地开始新建的git项目,通过git remote add origin ssh_url(给远程仓库取了名称叫做origin);对于git clone的项目, git已经知道要push的remote repo。

Git初始化

Git初始化包括多中场景:

  1. 从本地已有的文件夹添加git,使用git init,会在本地生成.git文件夹
  2. 从远程clone已经建立好的git仓库,会在本地生成.git文件夹,并添加remote

拉去coworker的操作

  1. git pull将远程仓库的所有内容拉到本地。等价于git fetch + git merge。使用–rebase将第二个操作从merge改为rebase

分支:将自己的操作上传到独立的分支,在分支进行代码版本管理,最终与master分支合并

  1. git branch brand_name 创建分支
  2. git checkout brand_name 切换到分支
  3. git checkout -b brand_name 创建分支并切换
  4. git branch -d 删除分支
  5. git push origin :brand_name 删除远程分支
  6. git merge brand_name 在master分支下合并brand_name分支
  7. git rebase brand_name

merge 将分支与master合并:使用git merge brand_name将brand_name的分支合并到由checkout切换到的当前分支。 比如在master分支下执行git merge brand_name,会将brand_name分支的内容通过fast-forward(master分支相比于brand_name没有任何更新)的方法合并到master上(master的HEAD直接移动到brand_name的HEAD上),如果master分支有更新别的内容,合并到master时会自动生成一次commit(master和brand_name的HEAD合并到下一个共同的HAED结点).

rebase 不同于merge将master HEAD移动到分支HEAD结点,或者建立master和branch的共同子结点的方法;rebase是将branch“平移”到master分支后,最终形成一条直接。

merge是将两个分支的修改合并到一起,rebase是提取当前分支的修改,复制到目标分支的最新提交后。

修改提交

  1. git add somefile.py + git commit –amend 把对somefile文件的修改合并到上一次commit中
  2. git reset –hard HEAD~~ 用来撤销全面两次commit, ~~或者~2表示往前追溯两代
  3. git rebase -i HEAD~~ 用来合并最近两字提交,将需要被合并的commit前的pick改为squash