Git 常用命令
初始化与配置
1 2 3 4 5 6
| git init # 初始化仓库 git config --list # 检查配置信息 git config --global user.name # 设置用户名 git config --global user.email # 设置用户邮箱 git config --global core.editor # 设置文本编辑器 git config --global alias.xx xxxx # 设置命令别名
|
文件基本操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| git add # 对当前追踪的文件制作快照,并将其索引添加至暂存区, 用于下一次提交(快照备份 + 建立索引) git status # 查看文件状态,是否追踪,修改,(待)提交等 git diff # 比较工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容
git commit # 生成提交信息(git status 里的内容),并将暂存区快照(索引)提交至仓库 -a: 跳过 git add 步骤,直接将追踪的文件以及相应的提交信息,提交至仓库 --amend: 执行后本次提交会覆盖上次提交(git log 可以发现前后两次提交记录只算一次)
git rm # 删除已追踪文件 -f: 强制删除已加入暂存区的文件 -cached: 取消文件已追踪状态,但会保留其本地存储内容
git mv # 移动文件或者重命名文件 git log # 查看提交历史 --pretty=oneline master: 查看某一分支提交历史 git reset # 取消文件暂存, 但并不会修改工作目录的文件. 可以理解为取消对 tracked 文件更新做快照备份 git checkout -- # 撤销修改,恢复文件至上一次提交时的状态, (所以这命令比较危险,因为会直接修改覆盖本地工作目录的文件) git clean # 清理工作目录 -f: 强制移除文件 -d: 必须跟-f 一起,表示文件夹也一起移除 -n: 显示哪些文件将被删除 -x: 表示将 .gitignore 里忽略的文件一起删除
|
注意 git rm 只能对已追踪的 (tracked) 文件进行操作,对于已追踪但是未加入暂存区 (index) 的文件 (unstaged),直接 git rm file_name;
对已加入 index 的文件则需要加入 -f 进行强制删除,git rm -r file_name;
这两个命令会将整个文件从本地磁盘删掉,如果只是希望不再追踪此文件,但是仍希望保存其在本地目录,那么需要执行 git rm -cached file_name 或是 git rm filefolder/\*.suffix;
如果文件已经被添加至 index,同时在外部删除该文件,那么 git status 会显示 unstaged commit.
此时执行 git add.,或者 git rm 会有一点类似,都会在下一次 commit 时提交信息中会包含这一改动,如 “deleted xx_file”; 如果
虽然通过 .gitignore 添加文件也可以取消某类文件的追踪,但是要取消已追踪文件还是要通过 git rm.
仓库基本操作
1 2 3 4 5 6 7 8 9 10 11 12
| git branch # 得到当前所有分支的一个列表, * 字符标记的分支表示当前所在分支 -v: 查看每一个分支的最后一次提交 -d: 删除分支 -r: 查看远程分支 -a: 查看所有分支,包括本地分支,以及远程分支 -u: 设置本地分支 --merged: 查看哪些分支已经合并到当前分支 --no-merged: 查看尚未合并到当前分支的分支
git merge # 合并分支至 master git checkout # 切换分支 -b: 切换并新建分支
|
远程仓库操作
1 2 3 4 5 6 7 8 9 10 11 12 13
| git remote # 显示远程仓库的简写 -v: 显示远程仓库使用的 Git 保存的简写与其对应的 URL -add: <shortname> <url> 添加一个新的远程 Git 仓库, 并指定其简写名称 rename: 远程仓库重命名 rm: 移除远程仓库 show: [remote-name] 显示远程仓库信息
git clone # 获取远程仓库所有数据至本地, git clone url filefolder 可以指定本地仓库文件夹名 git fetch # 从远程仓库获取更新,并将本地远程引用指向最新一次提交对象 git pull # 获取远程仓库某一分支数据,并 git push # 推送本地分支至远程仓库分支 git push origin branch # 推送本地 branch 至远程相同 branch git push origin local_branch:remote_branch # 推送指定本地 branch 至远程指定 branch
|
如果远程仓库发生变化,比如其他用户进行了更新,那么此时推送会被拒绝.必须先将远程仓库 git pull.
git clone 会给远程仓库自动添加 origin 的简称, 且自动设置本地 master 分支跟踪 colned 远程仓库的 master 分支(或其他默认分支)
底层命令
1 2 3 4 5
| git hash-object -w file_name # 将文件保存为 blob 对象,返回校验和(SHA-1哈希值) git write-tree # 创建树对象 git update-index --add --cacheinfo # 更新索引文件, 后面应给出文件模式,文件校验和,文件名 git cat-file -t 'hash-value' # 查看 Git 存储文件类型,输出为: tree, blob, 或者 commit git cat-file -p 'hash-value' # 根据给定的哈希值, 查看对应 .git/objects 下的存储文件信息
|
`
至此,可以看出每次暂存操作会计算每个文件校验和,将每个文件保存成 blob 对象,并以生成的校验和作为目录名和文件名