Git基础

创建存储库

# 创建一个新的本地存储库
$ git init [项目名称]

# 克隆存储库
$ git clone <git 仓库 url 地址>

# 将存储库克隆到指定目录
$ git clone <git 仓库 url 地址> <我的文件夹>
Read more

git 修改本地和远程分支名称

git branch -a #查看所有分支
git branch -r #查看远程分支
git branch -vv #查看本地分支所关联的远程分支

git branch -m old_branch new_branch #重命名本地分支
git push origin :old_branch #删除远程分支
git push --set-upstream origin new_branch #推送并关联新的远程分支

Git飞行规则(Flight Rules)

编辑提交(editting commits)

我刚才提交了什么?

如果你用 git commit -a 提交了一次变化(changes),而你又不确定到底这次提交了哪些内容。 你就可以用下面的命令显示当前HEAD上的最近一次的提交(commit):

(main)$ git show

或者

$ git log -n1 -p
Read more

git shallow clone

git clone 默认会下载项目的完整历史版本,如果你只关心最新版的代码,而不关心之前的历史信息,可以使用 git 的浅复制功能:

$ git clone --depth=1 git@github.com:hd1987/hd1987.github.io.git

--depth=1 表示只下载最近一次的版本,使用浅复制可以大大减少下载的数据量,如果之后又想获取完整历史信息,可以使用下面的命令:

$ git fetch --unshallow

Git 忽略文件不加入版本控制

.gitignore

# 此为注释 – 将被 Git 忽略
*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
tmp/* # 忽略tmp文件夹所有文件,因为git不会加入空目录

其它过滤条件

  • : 代表任意的一个字符
  • : 代表任意数目的字符
  • {!ab} : 必须不是此类型
  • {ab,bb,cx} : 代表ab,bb,cx中任一类型即可
  • [abc] : 代表a,b,c中任一字符即可
  • [ ^abc] : 代表必须不是a,b,c中任一字符

.gitignoreglobal

在用户目录下创建 ~/.gitignoreglobal 文件,
需要执行 git config --global core.excludesfile ~/.gitignoreglobal 来使得它生效。

忽略本地的文件控制,不影响全局

.git/info/exclude 这里设置的是你自己本地需要排除的文件,他不会影响到其他人,也不会提交到版本库中去。

去除已经提交文件的版本控制(公共)

  1. rm -rf PATH
  2. git rm -r --cached PATH
  3. 修改.gitignore,添加忽略文件
  4. git add -A
  5. git push

忽略已经提交到版本库的文件(本地)

git update-index --assume-unchanged PATH # 忽略跟踪
git update-index --no-assume-unchanged PATH #恢复跟踪

提交空的目录树

需要提交一个空的 log 目录时,在里面放置一个空的.gitignore

Git使用摘要

Git是一个“分布式版本管理工具”,简单的理解版本管理工具:大家在写东西的时候都用过“回撤”这个功能,但是回撤只能回撤几步,假如想要找回我三天之前的修改,光用“回撤”是找不回来的。而“版本管理工具”能记录每次的修改,只要提交到版本仓库,你就可以找到之前任何时刻的状态(文本状态)。

下面的内容就是列举了常用的Git命令和一些小技巧,可以通过”页面内查找”的方式进行快速查询:Ctrl/Command+f

Read more