Git看这篇就行了

Git分布式版本控制工具

每个人都拥有全部的代码!安全隐患!

所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。

不会因为服务器损坏或者网络问题,造成不能工作的情况!

一、Git配置

  • 所有的配置文件,其实都保存在本地!

    git config -list 查看所有配置项

  • 查看不同级别的配置文件:

    #查看系统config
    git config --system --list
      
    #查看当前用户(global)配置
    git config --global  --list
    
  • Git相关的配置文件:

    1)Gitetcgitconfig :Git 安装目录下的 gitconfig --system 系统级

    2)C:UsersAdministrator .gitconfig 只适用于当前登录用户的配置 --global 全局

1.1 设置用户名与邮箱(用户标识,必要)

当你安装Git后首先要做的事情是设置你的用户名称和e-mail地址。这是非常重要的,因为每次Git提交都会使用该信息。它被永远的嵌入到了你的提交中:

git config --global user.name "Q-volcano"  #名称
git config --global user.email 24736743@qq.com   #邮箱

只需要做一次这个设置,如果你传递了--global 选项,因为Git将总是会使用该信息来处理你在系统中所做的一切操作。如果你希望在一个特定的项目中使用不同的名称或e-mail地址,你可以在该项目中运行该命令而不要--global选项。总之--global为全局配置,不加为某个项目的特定配置。

二、Git基本理论

2.1 三个区域

  • 工作区:就是你在电脑里能看到的目录。
  • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
  • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

  • Directory:使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。
  • WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。
  • .git:存放Git管理信息的目录,初始化仓库的时候自动创建。

2.2 工作流程

git的工作流程一般是这样的

1、在工作目录中添加、修改文件;

2、将需要进行版本管理的文件放入暂存区域;

3、将暂存区域的文件提交到git仓库。

2.3 文件的4种状态

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

2.4 查看文件状态

上面说文件有4种状态,通过如下命令可以查看到文件的状态:

#查看指定文件状态
git status [filename]

#查看所有文件状态
git status

# git add .                  添加所有文件到暂存区
# git commit -m "消息内容"    提交暂存区中的内容到本地仓库 -m 提交信息

2.5 忽略文件

有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等

在主目录下建立".gitignore"文件,此文件有如下规则:

  1. 忽略文件中的空行或以井号(#)开始的行将会被忽略。
  2. 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等。
  3. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
  4. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
  5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
#为注释
*.txt        #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
!lib.txt     #但lib.txt除外
/temp        #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/       #忽略build/目录下的所有文件
doc/*.txt    #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

三、Git基本操作命令

3.1 创建仓库

  • 创建本地仓库(一般不用)一般情况直接在GitHub上创建仓库然后clone到本地仓库

    git init
    # 该命令执行完后会在当前目录生成一个 .git 目录。
    # 使用我们指定目录作为Git仓库。
    git init newrepo
    #初始化后,会在 newrepo 目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。
    
    git remote add <别名>  <url>  #添加一个新的远程仓
    
  • clone 远端仓库到本地仓 (常用)

    命令: git clone <repo>

    常见的几种写法

    git clone git@github.com:fsliurujie/test.git         --SSH协议
    git clone git://github.com/fsliurujie/test.git          --GIT协议
    git clone https://github.com/fsliurujie/test.git      --HTTPS协议
    
  • 推送本地到远程仓库

    git push <远程仓库地址> 分支名称

    git push <远程仓别名> 分支名称

    git push -u 远程仓库地址别名 分支名称

    ​ -u 记住推送地址及分支,下次推送只需要 git push

3.2 基本命令

菜鸟教程

3.3 Git分支

什么是分支?

分支就像平行宇宙一样,你做你的,我干我的,一般分有3种类型,

master分支, 最稳定

develop分支,基于master分支创建的开发中的分支

feature分支,基于develop创建的某个功能特征的分支

在某个分支开发完毕后,可以合并到主分支,实现协同开发,互不干扰

分支命令

  • git branch #查看分支

    git branch  #列出所有本地分支,打*号表示当前分支
    git branch -r #列出所有远程分支
    git branch -a #列出所有本地分支和远程分支
    
  • git branch <分支名> #创建分支

    git branch develop  #创建开发分支
    
  • git checkout <分支名> #切换分支

    git checkout develop 
    

    切换分支前记得git status ,若有需要commit的commit后再切换;

    切换不同的分支,文件会随之改变

  • git merge <分支名> # 合并分支

    # 按照顺序合并分支
    即  在 master 合并 develop
    	在 develop 合并 feature
    
  • git branch -d <分支名> #只能删除被合并的分支,如果没有的话,默认情况会报错

    git branch -D<分支名> #强制删除

小技巧:

在开发中,可以暂时提取分支上所有的改动存储,让开发人员得到一个干净的工作副本,临时转向其他工作。

使用场景:分支临时切换

  • 存储临时改动:git stash
  • 恢复改动:git stash pop

四、多人协作开发流程

  • A在本地创建本地仓
  • A在远端创建好仓库,编写好部分代码后 push 到远端
  • A 向 B发出 开发邀请 , B接受并让 A认证
  • B clone 远端仓库到本地
  • B 将本地仓库 push 到远端
  • A 将远端仓库 拉取 到本地 , 后续 B 一般也是拉取 远端到本地

git clone 完全复制,只需要执行一次就可以

git pull 是拉取远程仓库中最新的版本,前提是已经有了本地仓

git pull <url > <branch>

# 如果远程仓版本高于本地仓,则本地仓不能 push,必须先pull 拉取到最新版本 再push

解决冲突

在多人同时开发一个项目的时候,如果两个人修改了同一个文件的同一个地方,就会发生冲突,需要人为解决

为什么有冲突?

多个人同时推送,有先后关系,先推送的人能够推送上,后推送的人由于远程仓库版本高于本地仓,推送失败

所以,后推送的 人需要将远程仓的高版本拉取到本地,拉取到本地发现修改的是同一个文件,即发生了冲突

命令行会有提示,冲突的文件,我们要解决的就是打开 index.html 文件,然后查看冲突代码,修改成需要的

此时 ,后推送的人修改完成后 git add git commit 到本地仓,再推送就能成功

微团队合作

为开源项目找 bug 并改进,然后推送给开源作者

  1. fork 到自己的远程仓库

​2. 从自己的远程仓 clone 到本地 开发

  1. 本地修复,改进后 推送到自己的远程仓

  2. 在 GitHub 上创建一个 pull Request请求

  3. 原作者 查看消息 同时可以回复 ,查看检查代码后,决定是否合并

ssh 免密登入

生成公私钥后

设置本机绑定SSH公钥,实现免密码登录!

#生成公钥
ssh-keygen
# 在 C:UserAdministator.ssh 目录中找到公钥代码复制到Github

# 在本地添加远端仓库别名
git remote add origin_ssh git@github.com:xxxxxxxx

git push origin_ssh master
原文地址:https://www.cnblogs.com/Qvolcano-blog/p/14491805.html