简介
Git 的作用
Git 是一个分布式版本管理系统,是 Linux
内核的创始人 Liunus Torvas 为了更好地管理 Linux
内核开发而开发的。
Git可以在任何时间点,把文档的状态作为更新记录保存起来。因此可以把编辑过的文档复原到以前的状态,也可以显示编辑前后的内容差异。
而且,编辑旧文件后,试图覆盖较新的文件的时候(即上传文件到服务器时),系统会发出警告,因此可以避免在无意中覆盖了他人的编辑内容。
基本概念
在 Git 系统中,对文件进行修改后,需要提交修改,执行提交后,Git 会记录上次提交的状态与当前状态的差异记录,并给当前版本分配一个 Hash 值作为唯一的命名。
凭借该提交和最新的文件状态,就可以知道过去的修改记录以及内容。 指定这个命名,就可以在代码库中找到对应的提交。
Git 的代码库分为远程代码库和本地代码库的两种。
- 远程代码库: 配有专用的服务器,为了多人共享而建立的代码库。
- 本地代码库: 为了方便用户个人使用,在自己的机器上配置的代码库。
本地仓库由三部分组成。第一个是你的工作区
,它持有实际文件;第二个是暂存区
,它像个缓存区域,临时保存你的改动;最后是仓库区
创建仓库
创建
-
初始化仓库
git init
此命令将创建一个空白的仓库,仓库的配置信息以及未来仓库的更改记录将被存储在生成
.git
文件夹中。注意:在类 Unix 系统中,以 . 开头的文件名代表该文件为隐藏文件,默认不可见,使用ls -a
命令可以显示隐藏文件夹。 -
编辑 Git 配置文件 Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置) 使用以下命令来设置修改人的名称及邮箱地址,其中
--global
表示该设置作用在所有的仓库。git config [--global] user.name "your name"
git config [--global] user.email "your email address"
git config [--global] user.name "your name" git config [--global] user.email "your email address"
-
添加修改到暂存区
创建一个空白文本文件
readme.txt
,使用ls
命令,可以发现此文件,但是如果使用git ls-files
则无法发现此文件,这是因为该文件还未被添加进入暂存区,git 不会追踪该文件,运行以下命令git add readme.txt
我们将该文件添加进入暂存区。如果想要停止追踪该文件,我们使用
git rm readme.txt
命令,此时该文件被移出暂存区,但是该文件仍然存在工作区,不会被物理删除。 -
提交暂存区的修改到仓库
git commit -m "message"
其中
-m
表示添加修改说明,该修改说明可以帮助找到区别不同版本。注意:每次提交修改到仓库,必须添加修改说明,否则无法成功。
中文乱码
使用 git ls-files
时,中文文件名可能会出现乱码现象,解决方案是运行
git config --global core.quotepath false。
Mac 系统下如果同时使用了 oh-my-zsh
,则需要打开
-
打开oh-my-zsh配置文件 ~/.zshrc 。
-
在文件最后面添加如下代码:
export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8
-
重启下终端(terminal)或输入 source ~/.zshrc
版本管理
版本回溯
-
查看当前分支的版本历史
git log
-
版本回溯
git reset --hard version-digest
此时工作区和暂存区的文件全部被恢复为某版本,如果省去
--hard
,则只有暂存区的文件被恢复。
查看差异
-
显示暂存区和工作区的差异
git status
-
显示暂存区和工作区的差异
git diff
-
显示工作区与当前分支最新commit之间的差异
git diff HEAD
撤销修改
git checkout --
-
恢复暂存区的指定文件到工作区
git checkout [file]
-
恢复暂存区的所有文件到工作区
git checkout .
-
重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
git reset [file]
-
重置暂存区与工作区,与上一次commit保持一致
git reset --hard
保存现场
-
保存现场
git stash
-
恢复现场
git stash pop
分支管理
分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是“默认的”分支。在其他分支上进行开发,完成后再将它们合并到主分支上。
创建分支
git branch [branch-name]
git checkout -b [branch] 新建一个分支,并切换到该分支
除非你将分支推送到远端仓库,不然该分支就是 不为他人所见的
切换分支
git checkout [branch-name] 切换到指定分支,并更新工作区
合并分支
git merge [branch] # 选择一个commit,合并进当前分支
删除分支
git branch -d [branch-name] # 删除分支
git cherry-pick [commit] # 选择一个commit,合并进当前分支 $ git cherry-pick [commit]
远程仓库
申请 GitHub 账号
创建远程仓库
连接远程仓库
git remote add origin https://github.com/username/repository_name git push -u origin master
将修改提交到远程仓库
git push -u origin master
下载远程仓库的所有变动
git fetch [remote]
-
取回远程仓库的变化,并与本地分支合并, 相当于获取(fetch) 并合并(merge) 远端的改动
git pull [remote] [branch]
-
上传本地指定分支到远程仓库
git push [remote] [branch]
使用关键字
--force
,强行推送当前分支到远程仓库,即使有冲突