Git基础教程_git、github基础入门教程_纯干货

Git基础入门教程

1、Git简介

Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git是Linus Torvalds 为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。

1.1 Git的主要功能

  1. 文件备份
  2. 版本管理
  3. 多端共享

1.2 Git和SVN的区别

  1. Git是分布式的,SVN是集中式
    这是Git和SVN最核心的区别。好处是跟同项目的其他开发人员不会有太多的冲突,自己写的代码放在本地,一段时间后再提交、合并,也可以不用联网在本地提交;
  2. Git把内容按元数据方式存储而SVN是按文件存储
    所有的资源控 制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。如果你把.git目录的体积大小跟.svn比较,你会发现它们差距很大。因为.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。
  3. GIT的内容完整性要优于SVN
    GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
  4. 网络依赖性
    Git下载下来后,在本地不必联网就可以看到所有的log,很方便学习,SVN却需要联网;
  5. 提交流程
    SVN在Commit前,我们都建议是先Update一下,跟本地的代码比对没问题,并确保开发的功能正常后再提交,如果忘记Updata就Commit,会经常发生错误,耽误开发时间,Git因为多了添加到暂存区的步骤,这种出错情况会少些。

2、各系统Git安装

2.1 linux系统安装Git

  • 如果是Debian或Ubuntu可以使用下列命令完成Git的安装。
$ sudo apt-get install git
  • 其他Linux版本,可以直接通过源码安装。先从Git官网https://git-scm.com/downloads下载源码,然后解压,依次输入下列命令完成Git安装。
$ ./config
$ make
$ sudo make install

2.2 Mac OS系统安装Git

  1. 通过homebrew https://brew.sh/ 安装
  2. 通过AppStore安装Xcode,Xcode集成了Git,不过默认是没有安装的,选择菜单“Xcode”>“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。

2.3 Windows系统安装Git

  • 可以从Git官网直接下载安装程序,按照默认安装即可。安装完成后运行Git Bash,弹出下图窗口表示安装成功。
    windows Git

3、Linux常用命令

Git Bash使用的是Linux命令,下面列出了Linux的一些常用命令供大家参考。

命令 用途 备注
rm -rf 文件夹名 删除文件夹 慎用!如果不指定文件夹将会删除当前目录下所有文件夹,而且被删除的文件不能恢复!!!
rm 文件名 删除文件
mkdir 文件夹名 新建文件夹
cd 目录名 切换目录
cd ../ 返回上级目录
ls -al 显示当前目录所有文件 包括隐藏文件
touch 文件名 新建文件
cat 文件名 查看文件
mv 文件名 目标路径 移动文件
echo 内容 > 文件名 创建并输入内容到指定文件
echo 内容 >> 文件名 追加内容到指定文件
vi 文件名 用vi编辑文件 插入模式:按 i
退出编辑模式:按 esc
强制退出:输入:q!
保存后退出:输入:wq

4、Git分区

git分区

  • Git分为工作区、暂存区和版本区
    • 工作区:代码(文件)编辑的地方
    • 暂存区:暂时缓存文件的地方,Git对比SVN来说,SVN中是没有暂存区这个概念,代码直接从工作区提交到版本区,但是这样有不好的地方。在git中,暂存区的作用是:
      1. 为了避免工作过程中出现的一些误操作,保护工作区和版本区(版本回退和撤销)
      2. 可以进行分支处理
    • 版本区:本地最终代码存放的地方,从版本区中将文件提交到远程github仓库中
  • 查看文件状态
$ git status
  • 工作区文件为红色
  • 提交到暂存区的文件为绿色
  • 提交到版本区查看文件状态会显示nothing to commit, working tree clean

5、Git初始化

  • 安装完成后需要设置用户名和邮箱
$ git config --global user.name "YourName"              //设置用户名
$ git config --global user.email "[email protected]"    //设置邮箱

如果用了 –global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
如果要在某个特定的项目中使用其他名字或者电子邮箱,只要去掉 –global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

  • 初始化Git(创建工作区)
$ cd d:git          //切换到需要初始化的目录
$ git init          //初始化
  • 当前目录后面出现(master)就是已经被git管理了,master是默认分支,文件夹里会新建名为.git的隐藏文件夹
    master
    .git
  • 如果要取消当前文件夹被Git管理,删除当前目录下的.git文件夹即可,删除命令(慎用!如果不指定文件夹将会删除当前目录下所有文件夹,而且被删除的文件不能恢复!!!):
$ rm -rf .git
  • 不要在文件夹里初始化,然后再进子文件夹初始化,因为项目不能嵌套项目。

6、提交文件

-am

$ git add 'File Name'                  //将工作区文件提交到暂存区
$ git add .                            //将工作区全部文件提交到暂存区
$ git rm --cached 'File Name'          //删除暂存区文件
$ git rm --cached . -r                 //递归删除暂存区
$ git commit -m 'Version Description'  //提交到版本区
$ git commit -am 'Version Description' //从工作区直接提交到暂存区和版本区,文件需要提交到暂存区一次
$ git log                              //查看日志

7、文件比较与版本切换

7.1 文件比较

diff

$ git diff              //比较工作区和暂存区
$ git diff head         //比较工作区和版本区
$ git diff --cached     //比较暂存区和版本区

7.2 版本切换

checkout

$ git checkout .                 //从暂存区将工作区全部覆盖
$ git checkout 'File Name'        //从暂存区将工作区指定文件覆盖
$ git reset HEAD                 //从版本区拉取上一版本到暂存区
$ git reset --hard 'Version ID'  //版本区变更到指定版本
$ git reset HEAD^                //版本区返回到上一版本,有几个^就代表返回上几个版本
$ git reflog                     //查看所有版本区版本
$ git log --oneline              //查看版本区日志(单行显示)
$ git log --graph                //查看版本区日志(图形化显示)

8、分支

  • 要先提交一次创建主分支,HEAD指针默认指向master分支,每次提交到版本区就被视作为一个节点,在主分支的基础上添加一个分支,在分支上进行提交,最后切换到主分支来合并分支。
  • 如果分支文件没有冲突Git可以自动合并,如果有冲突需要手动删除不想要的保留想要的代码,手动解决完成后再进行commit操作。
    branch
$ git branch                   //查看本地分支
$ git branch -r                //查看所有远程分支
$ git branch -a                //查看所有本地和远程分支
$ git branch 'Branch Name'     //创建分支
$ git checkout 'Branch Name'   //切换分支,切换HEAD指针指向
$ git checkout -b 'Branch Name'//创建并切换分支
$ git branch -d 'Branch Name'  //删除分支,有修改但未合并的分支不能删除
$ git branch -D 'Branch Name'  //强制删除分支,删除分支不能在当前分支里面
$ git merge 'Branch Name'      //合并分支
  • 我们有时会遇到这样的情况,正在dev分支开发新功能,做到一半时有人过来反馈一个bug,让马上解决,但是新功能做到了一半你又不想提交,这时就可以使用git stash命令先把当前进度保存起来,然后切换到另一个分支去修改bug,修改完提交后,再切回dev分支,使用git stash pop来恢复之前的进度继续开发新功能。
    stash
$ git stash                            //存储最新进度文件,暂存区文件覆盖到工作区
$ git stash save 'Stash Description'   //存储文件附加说明
$ git stash list                       //进度文件列表
$ git stash pop                        //还原最新的进度文件到工作区,并将储存的进度删除
$ git stash pop --index                //恢复进度到工作区,在储存进度之前工作区提交过暂存区,也将暂存区恢复
$ git stash pop 'StashID'              //恢复指定的进度到工作区,StashID可以用过git stash list查询
$ git stash apply                      //除了不会删除储存的进度,其他与git stash pop命令相同
$ git stash apply --index              //除了不会删除储存的进度,其他与git stash pop --index命令相同
$ git stash apply 'StashID'            //除了不会删除储存的进度,其他与git stash pop命令相同
$ git stash drop 'StashID'             //删除一个储存的进度。如果不指定ID,则默认删除最新的存储进度
$ git stash clear                      //删除所有储存的进度

9、GitHub

9.1 注册登录

  • 访问GitHub主页,输入用户名、邮箱、密码进行登录
    登录
  • 没有账号可以按步骤进行注册
    注册

9.2 远程仓库

  • 创建仓库
    主页
    创建仓库
  • 关联远程仓库
    关联远程仓库
  • 创建一个新项目
$ makedir test
  • 创建README.md
$ echo "# test" >> README.md
  • 创建.gitignore文件,如果有不想提交的文件就写在里面
$ echo "不想提交的文件名" >> .gitignore
  • 初始化
$ git init
  • 提交项目
$ git add .
$ git commit -m "first commit"
  • git不会上传空文件夹,在空文件夹内创建.gitkeep可以上传此空文件夹
  • 关联远程仓库,别名:origin
$ git remote add origin https://github.com/SainHe/test.git
  • 将master分支推送到远程仓库,第一次写上-u会记录别名和分支名,以后再用一样的参数就可以不用加任何参数使用git push了
$ git push -u origin master
  • 拉取远程仓库代码至本地
$ git pull origin master
  • 查看所有远程关联仓库
$ git remote -v
  • 删除远程关联仓库
$ git remote rm origin

9.3 发布静态页

  • 在项目中创建一个gh-pages的分支
$ git checkout -b gh-pages
$ touch index.html
$ echo content > index.html
  • 再将gh-pages分支提交到远程仓库
$ git add .
$ git commit -m "message"
$ git push origin gh-pages
  • 在settings找到github-pages找到生成的网址
    settings
    github-pages

9.4 项目拉取到本地

  • 查找要拉取的项目仓库
    git
  • 复制远程仓库地址
    clone
  • 拉取到本地
$ git clone '远程仓库地址' origin
  • 拉取到本地的文件夹默认就是git仓库而且有origin地址,可以将代码提交到自己的GitHub

9.5 更改别人代码

  • Fork是在当前项目下克隆一份,如果代码更新,不会随之更新
    Fork
  • 进入自己Fork的仓库,点击New pull request将代码请求提交给原作者
    pull
  • 只有Fork关系才能发送pull request请求
  • Pull requests查看别人提交的更改请求

9.6 添加贡献者

  • setting——Collaborators——输入要邀请合作的人点击add collaborator添加贡献者,被添加的人拥有最大权限
    Collaborators

9.7 问题留言

  • 点击Issues,可以就项目的问题给开发者留言
    Issues

猜你喜欢

转载自blog.csdn.net/hexinyu_1022/article/details/80778307