Git使用总结

Git使用总结

开发策略

  • 在实际开发的时候一定要在分支上开发,修复问题,开发完成之后再合并到主分支(master)上,这样可以保证在不损坏主分支的情况下删除或者撤销内容

解决冲突

冲突产生

  • 假设现在有一个master分支,其中有一个提交之后的文件demo.txt,那么我们使用git checkout -b dev创建一个新的分支并且切换到这个dev分支

    • echo chenjiabing >> demo.txt:在文件的末尾追加一个文件
    • git add file.txt : 添加到暂存区
    • git commit -m "this is at dev:提交
    • git checkout master : 切换到主分支
    • echo 陈加兵 >>demo.txt : 切换到主分支,在主分支中在文件的末尾追加陈加兵(这里一定要在文件末尾,因为在dev分支中修改的位置就是文件末尾)
    • git add demo.txt : 添加到暂存区
    • git commit -m "this is at master" : 提交
    • git merge dev :快速合并分支dev到master分支上,那么现在将会出现版本冲突的问题,不能合并成功。此时的demo.txt的文件内容为:
    Git is a distributed version control system.
    Git is free software distributed under the GPL.
    Git has a mutable index called stage.
    Git tracks changes of files.
    <<<<<<< HEAD
    陈加兵
    =======
    chenjiabing
    >>>>>>> dev
    

冲突解决

  • 此时在master分支中修改demo.txt中的内容,直到满意为止即可
    • git add demo.txt : 添加
    • git commit -m "this is finally" :提交

分支管理策略

  • 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
  • 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
  • git merge --no-ff -m "merge with no-ff" dev

Bug分支(git stash)

  • Bug分支
  • git stash 将当前的工作现场存储起来
  • git stash list : 列出所有的工作现场
  • git stash pop : 回复当前分支的工作现场,并且还删除了stash中的内容

添加公钥到Github中

  • 如果你没有在git中配置邮箱和用户名,那么需要先配置

    • git config --global user.name "CSDN id"
    • git config --global user.email "your email"
  • cd ~/.ssh: 进入主目录的ssh文件夹中,查看是否已经存在秘钥文件id_rusa.pub,如果不存在,那么需要生成秘钥

  • ssh-keygen -t rsa -C "your email" : 生成公钥

  • 此时在~/.ssh文件夹下就有了id_rusa.pub文件夹,那么将其中的内容全部复制到github中的SSH中

  • 注意: 添加远程仓库的时候一定要使用ssh形式,否则将会要求输入密码

    • git remote add git@github.com:chenjiabing666/LearnGit.git

远程仓库的使用

常用命令

  • git clone git@github.com:chenjiabing666/LearnGit.git :直接clone远程仓库到本地仓库,此时的本地仓库也有了push的权利,不过只能看到一个主分支master ,但是这个远程仓库还有dev分支和Bug分支
    • git checkout -b dev orgin/dev : 直接在本地创建一个分支dev并且和远程仓库的分支关联起来,那么就可以获取远程dev分支上的文件了
  • git remote : 查看远程仓库的名称,这个只显示名称,使用git clone的方法关联远程仓库,默认的名字为orgin
  • git remote -v : 显示远程仓库的名称和链接
  • git remote add shortName url : 添加一个新的远程仓库
    • git remote add learn git@github.com:chenjiabing666/LearnGit.git
  • git remote rename 旧名称 新名称 : 修改远程仓库的名称
    • git remote rename orgin demo
  • git remote remove 名称 : 删除远程仓库
    • git remote remvoe orgin
  • git push 仓库名称 [分支名称] : 将提交的文件推送到远程仓库
    • git push orgin : 将文件推送到远程仓库的主分支master
    • 假设我们新建了一个dev分支 使用命令git checkout -b dev ,那么我们需要将这个dev分支推送到远程仓库中的dev分支上,使用git push orgin dev需要注意的是必须在当前的本地仓库的dev分支才能推送,并且这个本地仓库的名称要和远程仓库一样
  • git pull : 从远程仓库中拉取本地仓库分支中没有的文件并且合并到当前分支
    • 假设小明在master分支上提交了一个file.txt文件,但是小李的本地仓库中并没有file.txt这个文件,此时小李就需要从远程仓库中把这个文件拉取到自己的本地仓库的master分支上
      • git checkout master : 切换到主分支
      • git pull : 拉取远程仓库的最新文件

远程分支

推送分支

  • git push 名称 分支名称 : 推送分支到远程仓库中
    • git push orgin Bug : 推送本地的分支Bug推送到远程仓库中,那么仓库中默认的分支名就是Bug
  • 对于一些需要合作完成的分支需要推送到远程仓库,并不是所有的分支都需要推送到远程仓库的

抓取分支

  • 在多人协作完成项目的时候,都需要向主分支masterdev分支上面推送各自的修改
  • 我们使用git clone一个远程仓库的时候,默认情况下只能看到master分支,我们可以使用git branch查看分支。此时我们需要在dev分支上面操作,那么就必须将远程仓库中的dev分支创建到本地,我们可以使用git checkout -b dev orgin/dev ,那么远程仓库的中的dev分支就创建到本地了,那么此时我们就可以在dev分支上面操作了
    • git push orgin dev : 修改完成之后推送到远程仓库中
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
    • 如果远程仓库中有一个demo分支,本地也有一个demo分支,但是这个本地的demo分支并不是使用git checkout -b demo orgin/demo检出的,而是直接创建的,那么我们此时需要使用git pull拉取远程仓库中demo分支中的文件到本地的demo分支就会发现出现错误,因为没有与远程的demo分支关联,此时我们就需要使用git branch --set-upstream demo orgin/demo

总结

因此,多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin <branch-name>推送自己的修改;
  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
  3. 如果合并有冲突,则解决冲突,并在本地提交;
  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

标签的使用

创建标签

  • git tag v1.0 : 在当前分支上添加一个标签

  • git tag -a v1.0 -m "备注信息" : 添加一个标签并且备注信息

  • git tag : 列出当前分支上面的所有标签

操作标签

  • git tag -d v1.0 : 删除指定的标签
  • git push origin v1.0 : 推送标签到远程仓库,因为标签的创建不会自动推送到远程,必须手动推送
  • git push orgin --tags : 一次性推送全部的标签

删除远程标签

  1. 先删除本地标签 : git tag -d v1.0
  2. 使用push删除远程标签 : git push orgin :refs/tags/v1.0

添加所有文件

  • git add -A
  • 之后直接提交即可 : git commit -m ""

推荐阅读更多精彩内容

  • 小猪的Git使用总结 目录 [TOC] 概述: 接触Git也些年头了,对于Git的使用也算是略有心得,想着出于自己...
    coder_pig阅读 6,537评论 50 362
  • 一、Git工作流程 以上包括一些简单而常用的命令,但是先不关心这些,先来了解下面这4个专有名词。 Workspac...
    LeiLv阅读 5,282评论 2 38
  • (预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料) 一:Git是什么? Git是目前世界上最先进的...
    axiaochao阅读 502评论 1 5
  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 1,593评论 0 10
  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 6,872评论 4 128