Git 详细教程:从安装到分支操作

684 阅读2分钟

一、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官网下载源码,然后解压,依次输入:./configmakesudo 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提交更改,实际上就是把暂存区的所有内容提交到版本库。 image.png

三、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=远程分支名 本地分支名