基础操作
git init:将文件目录转为 git 仓库git add <filename>:将文件存入暂存区git push:将修改同步到远端仓库git pull:将远端仓库的新修改同步到本地git diff <filename>:查看工作区的修改了哪些内容,没有add的文件是不在diff的作用范围的。git commit -m <msg>:将暂存区的内容提交到仓库,commit后会得到干净工作区。git status:查看工作区的状态git log [--graph]:查看记录git tag:查看标签
Git 结构说明
- 工作区 工作区可以理解为咱们存放自己代码的文件目录。
- 版本库
工作区中含有一个隐藏的目录
.git, 这个就是 Git 的版本哭。里面有很多东西,我们的 Git 中的很多历史信息都是存在这里,版本回溯也是靠着里面的信息做到的。 - 暂存区 暂存区,可以理解为我们从工作区将代码移入“分支”前的中转站,在这里我们可以进行一些检查工作。
忽略特殊文件
Mac 下有 .DS_Store,运行 python 有 .pyc文件,make 有很多中间生成的文件,这些都是我们不想上传到仓库的文件,.gitignore 就是让我们配置哪些文件不用上传的位置。
- 配置方式
其实就是将不想上传的文件放在里面就好了,可以使用一些正则语法如
*,[]等等。同时 Github 为我们准备了一些常用的忽略列表可以直接使用。1
2
3
4# Mac .DS_Store # Python *.py[cod] - 强制添加文件
git add -f <file_name>:强制添加忽略规则内的文件。 - 查看文件为什么没有添加
git check-ignore -v <file_name>:会输出到底是哪个规则忽略了这个文件。
版本回退
git log/reflog:查看当前位置之前/之后的 commitgit reset --hard HEAD^/<commitID>:回退到上一步 / 某一个 commit 的状态git checkout -- <filename>:退回到commit或add时的状态。这个指令也可以恢复删掉的文件。 注:如果没有--就成了切换分支指令了git reset HEAD <filename>:回退到提交之前最新的状态
标签管理
git tag <tag_name>:打开一个标签git tag:查看所有标签git tag -a <tag_name> -m <description> <commit_id>:tag 是针对 commit 的,也就是说这次 commit 出现的分支上都可以看到这个标签。git show <tag_name>:查看 tag 的详细信息。git push origin <tag_name>:将 tag 推送到远程服务器,tag 不会自动推送到远程。git tag -d <tag_name>:本地删除 taggit push origin :refs/tags/<tag_name>:本地删除后,让远程仓库端也删除标签
远程仓库
首先要注意的是,远程仓库和本地的仓库是不同的仓库,这个概念在心里要有。
git remote -v:查看有哪些远程仓库,-v是更加详细显示。git remote add <name> <git_url>:同远程仓库关联,一般name为origin。git push -u origin master:第一次提交会将本地master分支和远程的master分支关联起来。git branch --set-upstream-to=origin/<branch_name> <local_branch_name>:当不能从远程仓库pull的时候,根据提示设置本地分支和远程分支的链接。git rebase:正常merge后,git log --graph展现的会出现分叉,有的人觉得这样子对比不直观,不想有这些分叉,于是就出现了这个rebase。
分支管理
这里要注意的是,我们对 git 仓库的操作可以想象是我们操作的是在操作一个链表上的指针。
git branch -a:查看当前仓库有什么分支。git checkout -b <new_branch_name>:新建一个分支,相当于git branch <new_branch_name>之后再git checkout <new_branch_name>git checkout <branch_name>:切换分支。注意的是,切换前需要把当前分支的所有改动 commit 到仓库中,否则会输出提示。git merge [--no-ff -m "msg"] <branch_name>:将别的分支合并到当前分支。默认时Fast forward模式,也就是说这种模式下删除分支后会丢掉分支信息,--no-ff取消了Fast forward。git branch -d/D <branch_name>:删除/强制删除某个分支
Git 开发分支思路
master:应该非常稳定,仅用来发布新版本,平时不在上面进行操作,需要关联到远程仓库。dev:这个是真正干活的地方,大家维护自己的分支,之后合并到 dev 上,需要关联到远程仓库。bug:bug 修复分支,如果没有合作开发就不关联到远程仓库。Feature:新的功能开发,如果没有合作开发就不关联到远程仓库
Github 的其他使用说明
- 合作开发:一般而言,我们不具有别人仓库的修改权限,所以我们要是想参与开源项目的话,需要有以下几个步骤:
Fork别人的仓库:这时候我们就有一个能修改的仓库了。pull request:当你修改了一个 bug 或者开发了一个新 feature 以后,可以通过pull request告知仓库所有者,看对方是否接受你的pull request。
- 别名
有些指令很长,我们不希望每次都要手动输入,解决这个问题的方式就是使用别名。当然这种别名设置在
zshrc中也可以。- 在
.gitconfig文件中的[alias]下设置1
2
3# in ~/.gitconfig [alias] lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%ci) %C(bold blue) <%an>%Creset' --abbrev-commit - 直接使用命令行
使用
git config --global alias.<alias_cmd> <cmd>来设置别名1
git config --global alias.ci commit
- 在
- 搭建 Git 服务器 除了使用 Github 官方的服务器外,我们还可以自己搭建自己的 Git 服务器,搭建的方法教程链接为这里。