基础操作
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 服务器,搭建的方法教程链接为这里。