一、Git 简介
linux之父尤纳斯为了更好的管理他自己的开源项目linux系统而自己用C语言开发的一个软件,这个软件可以帮助Linux更好的进行开源开发,名字就叫Git。Git是目前世界上最先进的分布式版本控制系统。因为Git跟踪并管理的是修改,而非文件。
二、Git 安装与基础配置
-
在Linux上安装Git
先输入
git查看系统有没有安装Git:$ git The program 'git' is currently not installed. You can install it by typing: sudo apt-get install git像上面的命令,Linux告诉你Git没有安装,可以直接通过源码安装。先从Git官网下载源码,然后解压,依次输入:
./config,make,sudo make install这几个命令安装就好了。如果你是Debian或Ubuntu Linux,通过一条
sudo apt-get install git就可以直接完成Git的安装。 -
在Windows上安装Git
可以从Git官网直接下载安装程序,然后按默认选项安装即可。安装完成后,可以在命令提示符或 PowerShell 中输入
git --version来验证是否安装成功,如果显示出 Git 的版本信息,则表示安装成功。 安装成功后设置用户名和邮箱,设置用户名:git config --global user.name "Your Name",设置邮箱地址:git config --global user.email "email@example.com",查看用户名:git config user.name,查看邮箱地址:git config user.email。 -
创建版本库
- 版本库的概念:版本库又名仓库,可理解为一个能被 Git 管理文件的目录,Git 能跟踪文件的修改和删除,通过创建空目录并执行 git init 命令即可创建。
- 添加文件到版本库:包括选择合适目录,注意文本编码问题,编写文件后分两步添加到仓库,即先用 git add 命令,git add 可多次使用添加多个文件,git commit -m 完成提交,commit 时-m 后的说明很重要。在仓库外执行 git add 命令会报错,添加文件时文件必须存在。
-
工作区与暂存区
工作区就是电脑里的本地文件,工作区有一个隐藏目录
.git,不算工作区,而是Git的版本库。往版本库里添加文件的两步操作,第一步用git add把文件添加进去,实际上就是把文件修改添加到暂存区,第二步用git commit提交更改,实际上就是把暂存区的所有内容提交到版本库。
三、Git 版本回退
一个文件我们会不断的修改与提交,每次提交会产生不同的版本,Git会把这些版本串成一条时间线。当我们想回溯到之前的版本时,用命令git reset --hard + 版本号,版本号可以用git log来查看,每一次的版本都会产生不一样的版本号。如果你想重返刚刚的版本,用命令git reset --hard + 版本号即可,用git reflog查看命令历史,得到你要前进的commit_id即可。
四、撤销修改
- 工作区修改的处理:当修改在工作区时,可使用 git checkout -- file 命令直接丢弃修改。
- 暂存区修改的处理:当修改不仅在工作区还添加到了暂存区,可先用 git reset HEAD 命令将暂存区修改撤销放回工作区,再按工作区处理方法操作。
- 版本库修改的处理:当修改已提交到版本库里时,可先用 git reset HEAD 命令版本回溯,再按工作区处理方法操作。
五、Git 删除
当工作区与版本库不一致的情况,Git 会感知到文件删除,git status 命令能显示被删除文件,此时有两个选择:
-
确实要从版本库删除:使用 git rm 命令并提交,文件会从版本库中被删除。
-
误删后的恢复:若版本库中有该文件,可通过 git checkout 命令将其恢复到最新版本。
六、Git 分支
分支的概念如同科幻电影里的平行宇宙,开发新功能时,通过创建分支能解决代码未完成提交的难题,既保证安全又不影响他人。Git 在创建、切换和删除分支时速度极快,1 秒钟内就能完成,而其他版本控制系统因速度慢导致分支功能未被充分利用。
- 原理:每次提交,Git 会将其串成时间线形成分支,主分支即 master 分支,HEAD 指向 master,master 指向提交。创建新分支如 dev 时,新建指针 dev 指向与 master 相同提交并改变 HEAD 指向。
- 创建与合并:创建分支
$ git branch 分支名并切换到该分支$ git checkout 分支名,用git branch命令查看当前分支,当前分支前面会标一个*号。然后提交到该分支$ git add 文件名,再把该分支的工作成果合并到master分支上:$ git merge 分支名,合并后删除该分支:$ git branch -d 分支名。 - 合并冲突的产生与解决:当 master 分支和另一分支各自有新提交后,Git 无法自动合并产生冲突,必须手动解决冲突后再提交。修改文件内容使其一致再提交就解决了。
- BUG分支:
- Git 分支修复 bug:在 Git 中可通过创建临时分支来修复每个 bug,修复后合并并删除分支。
- 工作未完成时的处理:当手头工作未完成但需立即修复 bug 时,可使用
$ git stash功能将工作现场“储藏”起来,之后再恢复。 - bug 修复后的操作:修复完成后切换到相关分支进行合并等操作,如在 master 分支修复后可通过
$git cherry-pick命令将修改“复制”到其他分支以避免重复劳动。
- 删除分支:用
git branch -d + 分支名有可能会删除失败,因为Git会保护没有被合并的分支。所有可以用git branch -D + 分支名强行删除,丢弃没被合并的分支。
七、Git 常用命令
-
初始化仓库:
git init -
添加所有文件到暂存区:
git add. -
提交更改:
git commit -m "提交描述" -
查看状态:
git status -
查看提交历史:
git log -
创建分支:
git branch 分支名 -
切换分支:
git checkout 分支名 -
创建并切换到新分支:
git checkout -b 分支名 -
合并分支到当前分支:
git merge 要合并的分支名 -
删除分支:
git branch -d 分支名 -
查看所有分支:
git branch -
比较差异:
git diff -
拉取远程仓库的更改:
git pull -
推送本地更改到远程仓库:
git push -
重命名分支:
git branch -m 旧分支名 新分支名 -
将本地分支与远程分支关联:
git branch --set-upstream-to=远程分支名 本地分支名