Git学习

Posted 假装空白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git学习相关的知识,希望对你有一定的参考价值。

0. 概述

0.1 工作区域

  1. 工作目录(Working Directory)

    平时存放代码的地方

  2. 暂存区(Stage/Index)

    用于临时存放改动,事实上,它只是一个文件,保存即将提交到问价列表的信息

  3. 资源库(Repository/Git Directory)

    仓库区或本地仓库,安全存放数据的位置,这里有提交到所有版本的数据,其中HEAD指向最新放入仓库的版本

  4. Git仓库(Remote Directory)

    远程仓库,托管代码的服务器,可以简单的认为是你想买组中的一台电脑用于远程数据交换

0.2 工作流程

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

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

    git add .

  3. 将暂存区域中的文件提交到Git仓库

    git committed

  4. 推送到远程仓库

    git push

因此,Git管理的文件有三种状态:已修改(modified)、已暂存(staged)、已提交(committed)

命令如下:

  1. clone(克隆): 从远程仓库中克隆代码到本地仓库

  2. checkout (检出):从本地仓库中检出一个仓库分支然后进行修订

  3. add(添加): 在提交前先将代码提交到暂存区

  4. commit(提交): 提交到本地仓库。本地仓库中保存修改的各个历史版本

  5. fetch (抓取) : 从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。

  6. pull (拉取) : 从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于fetch+merge

  7. push(推送) : 修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库

1. 常用指令

  • ls/ll

    查看目录中文件与目录内容

  • cat

    查看文件文本内容3

  • touch

    创建文件

  • vi/vim:文本编辑器

    • 键入【i】进行文本内容编辑
    • 内容修改完毕后按【esc】之后输入【:wq】保存并退出
  • cd

    改变目录

  • cd ..

    回退到上一个目录,直接 cd 进入默认目录

  • pwd

    显示当前所在的目录路径

  • ls(ll)

    列出当前目录中的所有文件,只不过 LL 列出的内容更为详细

  • touch

    新建一个文件,如 touch index.js 就会在当前目录下新建一个index.js文件

  • rm

    删除一个文件,如 rm index.js 就会吧index.js文件删除

  • mkdir

    新建一个目录,就是创建一个文件夹

  • rm -r

    删除一个文件夹,rm -r src 删除src目录

  • mv

    • 移动文件,mv index.html src,index.html就是我们要移动的文件,src是目标文件夹,当然
    • 重命名
  • reset

    重新初始化终端/清屏

  • clear

    清屏

  • history

    查看历史命令

  • help

    帮助

  • exit

    推出

  • 表示注释

2. Git安装与常用命令

2.1 安装配置

2.1.1 下载与安装

下载后默认安装即可

地址:https://registry.npmmirror.com/binary.html

2.1.2 基本配置(必须配置用户信息)

所有的配置文件都保存再本地!!!

  1. 打开Git Bash

  2. 设置用户信息

    git config --global user.name "ithm"
    git config --global user.email "ithm@qq.com"
    
  3. 查看用户配置信息(命令行查看)

    git config --global user.name
    git config --global user.email
    

    或者

    git config --global --list
    
  4. 查看配置信息(系统盘查看)

    在C盘用户目录 【.gitconfig】文件中

  5. 查看其它配置信息

    1. Git全部配置

      git config -l
      
    2. Git系统配置

      git config --system --list
      

2.1.3 Git三个程序

  1. Git Bash

    Unix与Linux风格的命令行,使用最多,推荐最多

  2. Git CMD

    Windows风格的命令行

  3. Git GUI

    图形化界面Git,不建议使用,尽量使用命令熟悉命令

2.1.4 卸载

  1. 直接反安装,清理环境变量

2.1.5 为常用指令配置别名(可选)

为常用的长指令设定别名,便于使用。

  1. 在用户目录中创建【.bashrc】

    touch ~/.bashrc
    
  2. 在文件中输入如下内容:

    #用于输出git提交日志
    alias git-log=\'git log --pretty=oneline --all --graph --abbrev-commit\'
    
    #用于输出当前目录所有文件及基本信息
    alias ll=\'ls -al\'
    
  3. 打开Git Bash 执行命令【source ~/.bashrc】

  4. 完成命令别名配置,可直接使用上述别名执行命令,如:git-log

2.1.6 解决Git Bash乱码问题

  1. 打开Git Bash执行下面命令

    git config --global core.quotepath false
    
  2. $git_home/etc/bash.bashrc 文件最后加入下面两行

    export LANG="zh_CN.UTF-8" 
    export LC_ALL="zh_CN.UTF-8"
    

2.2 获取本地仓库

初始化本地仓库

git init

2.3 基础操作指令

Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git的命令而发生变化。

2.3.1 *查看文件修改状态(status)

  • 作用:查看修改的状态(暂存区、工作区)

  • 命令

    git status
    

2.3.2 *添加工作区到暂存区(add)

  • 作用:添加工作区一个或多个文件的修改到暂存区

  • 命令

    git add 单个文件名|通配符
    # 例如:将所有修改的文件加入暂存区
    git add .
    

2.3.3 *提交暂存区到本地仓库(commit)

  • 作用:提交暂存区内容到本地仓库的当前分支

  • 命令

    git commit -m "提交注释内容"
    

2.3.4 *查看提交日志(log)

  • 作用:查看提交记录

  • 命令

    • 基本命令

      git log [options]
      
    • options(可选)

      • --all:显示所有分支
      • --pretty=oneline:将提交信息显示为一行
      • --abbrev-commit:使得输出的commitld更简短
      • --graph:以图形的心事显示

2.3.5 版本回退

  • 作用:版本切换

  • 命令

    git reset --hard commitID
    # 例如:
    git reset --hard 12ABC123
    
    • commitID:可以使用【git log】指令查看
  • 如何删除记录

    • git reflog
    • 这个指令可以看到已经删除的提交记录
    • 我们可以在reflog里面知道删除文件的id,我们可以直接使用命令【git reset --hard commitID】 还原,所以,【git reset --hard commitID】既可以做版本回退,也可以做版本还原

2.3.6 添加文件至忽略列表

一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以在工作目录中,创建一个【.gitignore】文件(固定名称),列出要忽略的文件模式,例如下列:

【*.a】,这样后缀为【.a】的文件就不会被加到缓冲区中,这样git就不会去处理这些文件,一般【.gitignore】文件公司都会给。

2.4 分支

几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。

master是我们的主线每个人开发的那一部分就是一个分支,使得每个人的开发互不影响,在每个人都开发完后就将所有的代码汇总到一起,此时就要执行分支的合并操作工作区只能在一个分支工作,每个分支存放的文件或者资源是不一样的,就相当于不同的文件夹,head指向谁,谁就是当前分支

2.4.1 查看本地分支

  • 命令

    git branch
    

2.4.2 创建本地分支

  • 命令

    git branch 分支名
    # 例如:创建名称为:dev的分支
    git branch dev
    

2.4.3 *切换分支(checkout)

  • 命令

    git checkout 分支名
    # 例如:切换到dev分支
    git checkout dev
    

    或者

    # 切换分支,当分支不存在时,创建并切换
    git checkout -b 分支名
    

2.4.4 *合并分支(merge)

把一个分支上的提交合并到当前所在分支

  • 命令

    git merge 分支名称
    

2.4.5 删除分支

不能删除HEAD当前所在分支,只能删除其它分支

  • 命令

    # 删除分支时需要做各种检查
    git branch -d 分支名称
    # 不做任何检查,强制删除
    git branch -D 分支名称
    
  • 错误提示

    • 【error: The branch \'fit\' is not fully merged.
      If you are sure you want to delete it, run \'git branch -D fit\'.】

      • 错误:分支“fit”未完全合并。

        如果您确定要删除它,请运行“git branch-D fit”。

      • 是因为当前所处分支非删除分支所合并的分支,所以只需要切换到合并的分支,再删除一次即可。

2.4.6 解决冲突

当同一个文件,被两个分支同时修改后进行合并时,发生冲突。

  • 冲突文件内容

  • 错误提示

    • 【Auto-merging 02F.txt
      CONFLICT (content): Merge conflict in 02F.txt
      Automatic merge failed; fix conflicts and then commit the result.】

    • 自动合并02F.txt

      冲突(内容):在02F.txt中合并冲突

      自动合并失败;解决冲突,然后提交结果。

  • 解决办法

    合并发生冲突,手动将冲突去掉,之后添加提交即可

2.4.7 开发中分支使用原则与流程

几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。

在开发中,一般有如下分支使用原则与流程:

  • master(生产)分支

    ​ 线上分支,主分支,中小规模项目作为线上运行的应用对应的分支;

  • develop(开发)分支

    ​ 是从master创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要是合并到master分支,准备上线。

    例如我们要开发新功能,我们要可以在develop分支上在建一个分支,新功能一般叫做feature分支,开发完以后在合并到develop分支上面去,而不是直接提交到master分支,最后项目做完了develop在合并到master分支上

    ​ develop和master分支是不可删除的

  • feature/xxxx分支

    ​ 从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支,用完后可删除。

  • hotfix/xxxx分支

    ​ 从master派生的分支,一般作为线上bug修复使用,修复测试完成后需要合并到master、test、develop分支。

  • 还有其它分支,例如:test分支(测试分支)、pre分支(预上线分支)等等

3. Git远程仓库

3.1 常用托管服务(远程仓库)

​ 前面我们已经知道了Git中存在两种类型的仓库,即本地仓库和远程仓库。那么我们如何搭建Git远程仓库 呢?我们可以借助互联网上提供的一些代码托管服务来实现,其中比较常用的有GitHub、Gitee、GitLab等。

​ 企业里面我们一般使用GitLab,毕竟代码放在自己的机房里面才安全,gitLab要自己部署。

  • gitHub( 地址:https://github.com/ )是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名gitHub
  • Gitee码云(地址: https://gitee.com/ )是国内的一个代码托管平台,由于服务器在国内,所以相比于 GitHub,码云速度会更快
  • GitLab (地址: https://about.gitlab.com/ )是一个用于仓库管理系统的开源项目,使用Git作 为代码管理工具,并在此基础上搭建起来的web服务,一般用于在企业、学校等内部网络搭建git私服。

3.2 配置SSH公钥(以Gitee为例)

  1. 生成SSH公钥

    • ssh-keygen -t rsa
      
    • 一直回车即可

      • 当公钥已存在,则自动覆盖
  2. 获取公钥(C盘用户目录下【.ssh】文件夹中查看【id_rsa.pub】文件)

    cat ~/.ssh/id_rsa.pub
    
  3. 配置Gitee公钥

  4. 验证是否配置成功

    ssh -T git@gitee.com
    

    显示如下,即为成功

    Hi 【你的Gitee名称】! You\'ve successfully authenticated, but GITEE.COM does not provide shell access.

3.3 操作远程仓库

3.3.1 *添加远程仓库

此操作时先初始化本地库,然后与已创建的远程库进行连接。

  • 获取远程仓库链接

  • 连接远程库

    • 命令

      git remote add <远端名称> <远程仓库路径>
      
      • 远端名称:默认时origin,取决于远端服务器设置
      • 远程仓库路径:从远程服务器获取的URL,即上一步的SSH链接
    • 例子

3.3.2 *查看远程仓库

  • 命令

    git remote
    
  • 例子

3.3.3 *推送远程仓库

  • 命令

    git push [-f] [--set-upstream] [远端名称 [本地分支][:远端分支名称]]
    
    • 如果远程分支名和本地分支名称相同,则可以只写本地分支

      git push origin master
      
    • 【-f】表示强制覆盖远程仓库的内容

    • 【--set-upstream】推送到远端的同时并且建立起和远端分支的关联关系

      git push --set-upstream origin master:master
      
    • 如果当前分支已经和远端分支关联,则可以省略分支名称和远端名称

      # 将master分支推送到已关联的远端分支
      git push
      
  • 例子

3.3.4 *本地分支与远程分支的关联关系

3.3.4.1 查看关联关系

  • 命令

    git branch -vv
    
  • 例子

3.3.4.2 建立分支与远端分支关联关系

  • 命令

    • 情况一:将当前所在分支关联远程分支

      git branch -u origin/<远程分支名>
      
    • 情况二:设定非当前所在分支与远程分支关联

      git branch -u origin/<远程分支名> <本地分支名>
      
    • 情况三:如果远程新建了一个分支,但本地没有该分支时,使用下列命令,在本地新建一个分支名与远程分支名一致,会自动跟中远程同名分支

      git checkout --track origin/<远程分支名>
      
    • 情况四:关联指定远程分支

      git branch --set-upstream-to=origin/<远程分支名> <本地分支名>
      
  • 例子

3.3.5 从远程仓库克隆

如果已经有一个远端仓库,我们可以直接clone到本地。

  • 命令

    git clone <仓库路径> [本地目录]
    
    • 本地目录可以省略,会自动生成一个目录
  • 例子

    左边是我们上传的仓库,右边是克隆下来的仓库

    不同的主机都把修改完了版本资源放在远程仓库上,然后其他人都是克隆,这样就可以实现不同主机之间的数据同步了,数据都是一样的,克隆一般只会执行一次,就是在你进去公司的时候,别人提交了以后,我们不需要去克隆整个仓库,仓库是很大的,克隆也需要花很多时间,所以要去远程仓库中抓取我们要的版本信息,就是那些别人新增加的提交。

3.3.6 从远程仓库中抓取和拉取

远程分支和本地的分支一样,我们可以进行merge操作,只是需要先把远端仓库里的更新都下载到本地,再进行操作。

3.3.6.1 抓取

  • 命令

    git fetch [remote name][branch name]
    
  • 概念

    • 抓取指令就是将仓库里的更新都抓取到本地,不会进行合并
    • 如果不指定远端名称和分支名称,则抓取所有分支

3.3.6.2 拉取

  • 命令

    git pull [remote name] [branch name]
    
  • 概念

    • 拉取命令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge
    • 如果不指定远端名称和分支名称,则抓取所有并更新当前分支。
  • 合并错误

    • fatal: refusing to merge unrelated histories

      • 操作命令后面加 –allow-unrelated-histories

      • 例如:merge时错误(pull、push错误一样)

3.3.7 解决合并冲突

我们要更新远程仓库的资源时,先要获取此时远程仓库的资源后,在合并到自己的master分支中,然后再上传到远程仓库上

在一段时间,A、B用户修改了同一个文件,且修改了同一行位置的代码,此时会发生合并冲突。A用户在本地修改代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B用户晚于A用户,故需要先拉取远程仓库的提交,经过合并后才能推送到远端分支,如下图所示。

在B用户拉取代码时,因为A、B用户同一段时间修改了同一个文件的相同位置代码,故会发生合并冲突。

远程分支也是分支,所以合并时冲突的解决方式也和解决本地分支冲突相同相同。1. 先解决冲突文件冲突内容。2. 将冲突文件add。3. 将冲突文件commit。4. push到远程仓库。

3.4 克隆远程仓库所有分支

创建一个空目录并导航到它。使用 git clone --mirror 命令克隆你的仓库。

  1. --mirror 选项设置包含所有分支的源仓库的镜像。
git clone --mirror git://xxx.com/test.git .git

测试目录中的本地仓库似乎是空的。但是,有一个隐藏的 .git 文件夹,我们可以在终端中使用 ls -a 命令查看它。

  1. 此命令将仓库设置为裸仓库。要将其变回常规仓库,请将 git configbare 布尔值更改为 false
git config --bool core.bare false
  1. 使用 git reset 命令设置 HEAD。它从当前文件夹中获取所有内容并在本地计算机上创建所有分支。
git reset --hard
  1. 使用 git branch 命令。你会看到所有的分支。
git branch

4. 在IDEA中使用Git

4.1、在Idea中配置Git

安装好IntelliJ IDEA后,如果Git安装在默认路径下,那么idea会自动找到git的位置,如果更改了Git的安

装位置则需要手动配置下Git的路径。选择File→Settings打开设置窗口,找到Version Control下的git选

项:

点击Test按钮,现在执行成功,配置完成

4.2、在Idea中操作Git

场景:本地已经有一个项目,但是并不是git项目,我们需要将这个放到码云的仓库里,和其他开发人员

继续一起协作开发。

4.2.1、创建项目远程仓库(参照4.3)

4.2.2、初始化本地仓库(将当前项目初始化为仓库)

在idea中创建文件的时候,它会询问你是否要将文件添加到git中,修改文件的时候,idea会自动帮我们去add,我们只需要去commit就好了

此时我们的项目目录就变成了一个本地仓库

绿色的文件代表已添加到git中

爆红的文件没有被添加到git当中,被Git识别为冲突文件

灰色的文件代表已忽略的文件,可以在gitignore文件中配置

这里只是我们的本地仓库

4.2.3、设置远程仓库

远程仓库名默认为origin

4.2.4、提交到本地仓库

4.2.6、推送到远程仓库

在将本地仓库的修改推送到git远程仓库的时候,我们要先pull,先拿到此时远程仓库的版本信息,再去此版本信息上修改

4.2.7、克隆远程仓库到本地

4.2.8、创建分支

  • 最常规的方式
  • 最强大的的方式

4.2.9、切换分支及其他分支相关操作

4.2.11、解决冲突

  1. 执行merge或pull操作时,可能发生冲突
  1. 解决文件里的冲突,删除提示信息

  2. 冲突解决后加入暂存区

  1. 提交到本地仓库

  1. 推送到远程仓库

4.2.12查看分支

可以看到本地仓库的分支和远程仓库的分支

4.2.13创建分支

方式一:

方式二:(推荐)

这种方式还可以看到分支所在的版本信息

4.2.14合并分支

这个标签表示是当前分支

我们到想要合并的分支上面,右键

4.3、IDEA常用GIT操作入口

  1. 第一张图上的快捷入口可以基本满足开发的需求。
  1. 第二张图是更多在IDEA操作git的入口。

4.4 IDEA集成GitBash作为Terminal

5. Git 多人协作以及各分支说明

5.1 主分支 Master

​ 代码库应该有一个且仅有一个主分支:master。所有提供给用户使用的正式版本,都在这个主分支上发布。

​ 每次发布打一个tag,例如:tag v1.0.0、tag v2.0.2

5.2 开发分支Develop

主分支只用来发布重大版本,日常开发应该在另一条分支上完成。我们把开发的分支,叫做develop

​ 这个分支可以用来生成代码的最新隔夜版本(nightly)。如果想正式对外发布,就在master分支上,对develop分支进行合并(merge)。

Git创建Develop分支命令:

# git checkout -b <newBranch> <fromBranch>
git checkout -b develop master

将Develop分支发布到Master分支命令:

# 切换到Master分支
git checkout master

# 对Develop分支进行合并
git merge --no-ff develop

--no-ff:默认情况下,Git执行 “快进式合并”(fast-farward merge),会直接将Master分支指向Develop分支。使用 【--no-ff】参数后,会执行正常的合并,在Master分支上生成一个新的节点。为了保证版本演进的清晰,希望采用这种做法。

5.3 临时性分支

​ 版本库的两条主要分支:master 和 develop 。 前者用于正式发布,后者用于日常开发。其实,常设分支只需要这两条就够了,不需要其他。但是除了常设分之外,还有一些临时性的分支,用于应对一些特定目的的版本开发。临时性分支主要有以下三种:

  • 功能分支:feature
  • 预发布分支:release
  • 修补Bug分支:hotfix

这三种分支都属于临时性需要,使用完以后,应该删除,使得代码库的常设分支始终只有Master和Develop。

5.3.1 功能分支:feature

​ 功能分支,它是为了开发某种特定功能,从Develop分支上分出来的。开发完成后,要再合并如Develop分支。

​ 功能分支的名字,可以采用【feature-***】的形式命名

# 创建一个功能分支
git checkout -b feature-pay develop

# 开发完成后,将功能分支合并到develop分支:
git checkout develop
git merge --no-ff feature-pay

# 删除feature-pay分支
git branch -d feature-pay

5.3.2 预发布分支:release

​ 预发布分支,它是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。

​ 预发布分支是从Develop分支上面分出来的,预发布结束以后,必须合并到Develop和Master分支。他的分支名字,可以采用【release-***】的形式命名

# 创建一个预发布分支
git checkout -b release-1.2.0 develop

# 确认没有问题后,合并到master分支
git checkout master
git merge --no-ff release-1.2.0

# 对合并生成的新节点,做一个标签
git tag -a 1.2.0

# 再合并到develop分支
git checkout develop
git merge --no-ff release-1.2.0

# 最后,删除release-1.2.0预发布分支
git branch -d release-1.2.0

5.3.3 修补Bug分支:hotfix

​ 修补Bug分支,软件正式发布后,难免会出现bug。这是就需要创建一个分支,进行bug修补。

​ 修改补Bug分支是从master分支上分出来的。修补结束后,将其合并到master与develop分支中。

​ 它的分支名字,可以采用【hotfix-***】的形式命名。

# 创建修补Bug分支并切换至分支
git checkout -b hotfix-pay master

# 修补结束后,合并到master分支上
git checkout master
git merge --no-ff hotfix-pay

# 给master分支打标签
git tag -a 0.1.1

# 再合并到develop分支上
git checkout develop
git merge --no-ff hotfix-pay

# 最后删除修补bug分支 hotfix-pay
git branch -d hotfix-pay

git学习总结

很早之前就已经听说github的大名,但未深入的学习使用,最近深入学习了一下git和github,真正了解了git和github为什么产生,以及项目的开发为什么会用到git和github.说了半天的git和github,也许你也有这样的疑问,git和github是什么关系?通俗的说github是git的网上仓库,便于多人合作开发,而git是一个运行于本地的版本控制工具。从这个角度来说你也可以理解git和github产生的原因,当你在公司做开发的时候,工作是在本地进行的,可能需要多次的回退修改,最终修改后提交自己的成果到github,然后同一个开发团队的人可以查看你的修改,下载修改后的项目,然后做进一步的开发,每个人都这样做,这个项目一步一步就完成了,而且每一次谁修改了,如何修改的都记录在案,如果感觉修改的不好就可以回退到上一个版本。这就是git和github产生的原因,想想如果没有git和github,每次修改之前都要备份一份,修改后又复制一份,同一团队的其他人想要看你的修改还要到你电脑上拷,岂不是很麻烦?话说git是开发Linux内核产生的,当初也许他们正是碰到了这个问题才想到开发这个工具的吧。下面是git的一个常用命令流程图,通过这个图,你可以更形象的掌握git的使用流程,其中远程仓库就是常说的github,当然也可以是其他的

技术分享

 

一般情况下开发项目或者什么都有一个工作目录,比如我的工作目录是git-demo,当你想要把一个目录变成git目录的时候使用git init命令,他会建立一个.git目录,里边存储了一些版本控制信息。比如你在这个目录中添加了一些文件或者修改了一些文件,可以通过 git add <filename>命令将它存储到暂存区(Stage),如果确认修改好了,就可以通git commit -m "解释信息"提交到本地仓库(Repository),至此你就完成了本地的提交操作,当然在这个过程中你可以通过git status 查看当前状态,通过git diff 查看修改对比,通过git log查看版本库的状态,通过git  --hard commit-id 重置HEAD指针进行版本回退。

本地修改完成后,就可以将其推送到github,在推送之前需要关联对应的github账号,设置ssh密码:

1.在本地git shell中运行$ ssh-keygen -t rsa -C "[email protected]"

2.在用户主目录下(windows如:用户/Adminstrator下).ssh文件夹,在对应账号的github设置下添加ssh密钥,复制key为id_rsa.pub中的内容就可以了

现在我们可以链接到github中一个现有的仓库,使用命令 git remote add origin [email protected]:username/git-demo.git,当然也可以使用HTTPS协议进行传送。

然后可以通过git push -u origin master将master本地仓库推送到远程github中。如果想要重新建立一个新的远程链接,可以先断开当前的链接使用命令git remote rm origin,然后重新链接。现在你就可以将自己的项目推送到远程网上仓库了。

当然,我们可能有时候要从github中拷贝后进行修改,可以使用git clone [email protected]:username/git-demo.git拷贝后进行修改后提交。图示有说明

当然我们的队友可能先于我们提交新的修改,我们要使用git pull进行远程同步后,在新的基础上进行修改。

至此一个完整的git流程就走完了。

当然除此之外还有一些其他概念,比如分支(branch),标签(tag)。master是主干,一般不再这个上修改,分支顾名思义是主干上的小分叉,我可以在分叉上工作完成后合并到master上,这里涉及分支的创建git branch <branchname>,跳转到分支 git checkout <branchname>,当然也可以一步到位git checkout -b <branchname>创建分支并跳转,可以在分支上进行正常的开发,开发完成后切回master(用checkout)合并这个分支的开发成功用git merge <branchname>,分支上的工作完成后可以删除分支使用git branch -d <branchname>,至此branch的一个生命周期就完成了,当然git merge推荐加上--no-ff参数,例如git --no-ff -m "描述" 可以记录每一次的合并。

还有一个命令比较重要是git stash,当你正在一个分支开发未完成时,这时你并不想提交,而突然有任务转向其他分支,你就可以使用 git stash 暂存当前的工作状态(类似存档),当完成突发任务后读档继续进行工作,这是不是太爽了,没错,就是这么爽。你可以使用git stash list查看当前的存档,使用git stash pop将最上面的任务读出继续工作。

标签相当于发布的一个版本,当需要在一个分支上使用git tag <name>创建一个标签,-m可以加上注释,可以使用 git push origin <tagname>推送一个tag到github,使用git tag -d <tagname>删除一个标签。

参考文献:廖雪峰的git教程git官方教程git和github的区分

 

以上是关于Git学习的主要内容,如果未能解决你的问题,请参考以下文章

git学习总结

Git学习——Git分支篇(未完)

Git系列学习-Git安装

git学习笔记

天天都在用Git,那么你系统学习过吗?学习过程

学习git