git

####git命令行操作

#####本地库初始化

  • 初始化: git init
  • 命令:git add
  • 效果:
  • 注意: .git目录中存放的是本地库相关的子目录和文件,不需要删除和修改。

#####设置签名

  • 形式:
  • 用户名: Tom
  • Email地址: goodMorning@qq.com
  • 作用: 区别不同开发人员的身份
  • 辨析: 这里设置的签名和登录远程库(代码托管中心)的账号密码没有任何关系
  • 命令:

    • 项目级别/仓库级别:仅在当前本地库范围有效
      • git config user.name tom_pro
      • git config user.email goodmoring@qq.com
      • 信息保存的位置 ./.git.config文件中
    • 系统用户级别 :登录当前操作系统的用户范围
      • git config –global user.name tom_glb
      • git config –global user.email goodmoring@qq.com
      • 信息保存的位置 cd ~ 到home目录下的.git.config 文件中
    • 级别优先级
      • 就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名
      • 如果只有系统用户级别的签名,就以系统用户级别的签名为准
      • 二者都没有不允许
        ####命令汇总
  • 状态查看 获取当前状态

    • git satus
    • 可以查看工作区.暂存区的工作状态
  • 添加操作 将文件提交到暂存区
    • git add xxx文件
    • 将工作区的新建/修改添加到暂存区
  • 提交操作
    • git commit -m “commit message” 文件名
    • 将暂存区的内容提交到本地库
  • 查看日志
    • git log 查看你的提交日志
      • 多屏显示方式:
        • 空格向下翻页
        • b向上翻页
        • q退出
    • git log –pretty=oneline 每个提交记录只占一行
    • git log –oneline 将hash值只显示一部分占一行
    • git reflog 能显示版本之间需要移动指针的次数
  • git rm –cached xxx文件 将文件从暂存区移出变成未追踪的文件

######分支的前进后退

  • 基于索引值操作(推荐)
    • git reset –hard [局部索引值]
    • git reset –hard 79c7a63
  • 使用^符号:只能往后退有几个 ^就代表后退几个版本
    • git reset –hard HEAD^
  • 使用~符号 波浪线后的n代表后退几个版本
    • git reset –hard HEAD~n

######reset 命令的三个参数对比

  • –soft 参数
    • 仅仅在本地库移动指针
  • –mixed参数
    • 在本地库移动HEAD指针
    • 重置暂存区
  • –hard 参数
    • 在本地库移动head指针
    • 重置暂存区
    • 重置工作区

####删除文件

  • 能找回删除的文件的前提是:删除前,文件存在的状态提交到了本地库
  • 操作:git reset –hard[指针位置]
    • 删除操作已经提交到本地库:指针位置指向历史记录
    • 删除操作尚未提交到本地库:指针位置使用HEAD

####比较文件

  • git diff [文件名]
    • 将工作区中的文件和暂存区进行比较
  • git diff [本地库中的历史版本] [文件名]
    • 将工作区的文件和本地库历史记录比较

####分支的操作

  • 查看所有分支 git branch -v
  • 创建一个分支 git branch [分支名]
  • 切换分支git checkout [分支名]
  • 合并分支
    • 第一步:切换到接受修改的分支上(被合并的,增加新内容) git checkout [被合并的分支名]
    • 第二步:执行 git merge [有新内容的分支名]
  • 解决冲突
  • 冲突的表现
    • 1.先使用git marge[分支名] 如果有冲突会提示你手动合并
    • 2.使用vim编辑文件删除特殊符号解决冲突问题
    • 3.使用git add [文件名] 提交
    • 4.使用git commit -m “xxx” 提交 注意不要后面不要加上文件名

####为常用操作起别名
查看所有存在的别名

####推送和克隆

#####推送

将本地的资源推送到远程

git push [别名][分支名]

#####克隆

  • 命令 git clone[远程地址]
  • 完整的将远程库资源下载到本地
  • 创建oragin远程地址别名
  • 初始化本地库
    • 效果
    • 完整的把远程库克隆到本地
    • 创建oragin远程地址别名
    • 初始化本地

如果远程库需要多人协作的话可以在库的settings中选择Collaborators 将添加邀请发给另外一个人

如果你需要登录其他人的GitHub可以将windows凭据管理器中GitHub的凭据删除

#####远程库修改的拉取
如果觉得不会产生冲突的话直接使用
git pull origin master

如果是为了保险可以先fetch看一看,如果没有问题再合并分支

  • pull 相当于fetch + merge
  • git fetch [远程库地址别名][远程分支名] 使用 git checkout [远程地址别名/远程分支名] 切换到那个分支然后cat 看文件
  • git merge [远程地址别名/远程分支名]

####协同开发冲突的解决

如果当你push时远程库和本地库冲突了,可以先将远程库pull拉取下来获取最新版本的文件,然后手动修改冲突的文件然后git add git commit (注意commit 后面不需要加文件名)提交到本地库最后push

####跨团队协作

  • 先fork获取分支

  • 然后再将项目克隆到本地修改上传到自己的远程库
  • 然后使用Pull requests 将自己的修改提交给别人

####使用SSH登录免除每次push都需要输入密码的麻烦

cd ~ 进入用户家目录

rm -r .ssh/ 删除以前存在的ssh

ssh-keygen -t rsa -C 邮箱地址 生成ssh密匙目录

cd .ssh/ 进入.ssh目录查看文件列表

ll

cat id_rsa.pub 查看id_rsa.pub内容

然后将id_rsa.pub中的内容复制到github上

回到gitbash 创建远程地址别名 注意是ssh的地址

然后就可以愉快的push 文件了

####IDEA操作

#####工程初始化为本地库
选择create git Repository

#####将项目提交到本地的git
先add

然后commit Directory

然后在github 上创建一个仓库

然后通过ssh提交或者直接使用IDEA自带的push直接提交 提交成功后GitHub就能直接看到提交的文件了

复制ssh地址

在本地项目目录使用gitbash 为shh地址取别名

然后直接push 这个分支吧

成功上传

#####克隆项目

选择git

然后输入GitHub项目的url就能成功克隆到本地