0%

Git学习笔记

Git是分布式版本控制系统,特别适合多人协作开发。2005年Linus用了10天时间,开发了第一版Git,用于管理linux内核的代码(from wiki)。GitHub是一个源代码托管服务平台,使用Git作为版本控制软件,2018年被微软收购。

Git内部会有一个Repository,给代码库做快照,每一次commit,都会把完整的代码库进行快照,并保存起来。

git config --global -e

git config --global user.name

git init

  • 初始化当前目录为代码库

git add .

  • 把新修改的文件放入stage area。stage area相当于一个缓冲区。

git commit [-m desc]

  • 把stage area的文件作为正式的代码提交,放到Repository中。
  • 如果不加-m,可以打开默认的编辑器,写比较长的commit描述

git status [-s]

  • 查看当前work tree,stage area,repository的情况,可以看到哪些代码做了变更,哪些准备commit
  • -s选项可以简化status的输出

git diff [--staged]

  • diff命令可以查看working dir和stage area中代码的区别
  • --staged选项,可以查看stage area和最后commit的代码的区别

git log --oneline

  • 查看代码库提交历史
  • --oneline选项可以简化输出

git show [commit id] [HEAD~n]:<filename>

  • 可以查看具体某次commit的时间,作者,修改的文件,和内容
  • 加上:<filename>可以看到在那次commit时,指定文件当时的内容

git restore

  • 可以把stage area的代码,拷贝回working dir,这样可以把代码复原
  • git restore --source=HEAD~2 <filename>可以把指定文件恢复到以前的某次提交

git rm [--cached] file

  • git rm 会删除repo、stage area,和work tree上的代码
  • 加上--cached,会保留工作区对应文件

git checkout

  • 可以切换到某一次commit
  • 可以切换到某一个tag

git tag

  • 对某一次commit打标签

git branch

  • 在当前HEAD的commit上,开分支
  • git branch -r,查看代码服务器上的分支

git switch [-C]

  • 可以切换branch
  • -C选项可以同时创建分支,并切换到此分支上
  • git switch -C local-branch origin/branch,可以切换到服务上的分支,继续开发

git merge

  • 合并分支,主要是把其他分支合并到master上
  • --abort可以中止merge,回到合并前

git clone

git fetch

  • 把remote repo的commit拉下来,需要手动merge

git pull

  • 把remote repo的commit拉下来,同时自动做merge

git push

  • 把本地的修改,push到服务器上
  • git push origin v0.1,这样可以推送tag,
  • git push origin --delete v0.1,删除服务端tag
  • git push origin --delete <branch name 删除服务端branch

Git接触也有近10年,原来一直用错了。之前都是用CVS,而且没有多人开发同一模块的情况,现在有多人开发一份代码的时候,有必要重学一遍Git。