Git客户端安装

今天就结合`GitHub`,通过`Git`命令,来了解如何实现开源代码库以及版本控制

GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git 作为唯一的版本库格式进行托管所以我们需要下载一个Git客户端软件,用来执行各种指令

Git下载地址https://git-scm.com/

下载完毕后,配置`path`环境变量,`E:\develop\git\Git\bin`(我本机的在E盘下)

在`doc`命令行窗口输入`git`命令,如果出现如下的信息,说明安装成功,

  1. C:\Users\67334>git
  2. usage: git [--version] [--help] [-C <path>] [-c name=value]
  3. [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
  4. [-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
  5. [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
  6. <command> [<args>]
  7. These are common Git commands used in various situations:

点击鼠标右键,菜单栏会出现 `Git GUI` 和 `Git Bash`GUI: Graphical User Interface(用户图形界面)Bash:是Windows下的命令行工具

版本存储仓库:

  1. 公共:
  2. - github
  3. - 码云
  4. 自己搭建:
  5. - gitlab

Git命

接下来我用`git`命令,来一步步实现GitHub发布项目,版本控制的功能

1、首先在电脑上创建一个空文件夹,我为这个空文件夹起名叫demo,然后进入该文件夹首先在GIT终端执行,`git init` 指令,会在demo文件夹生成`.git`文件夹

2、在demo文件夹内创建一个a.txt文件,然后通过`git status` 查看,该指令作用是 列出修改过的(绿色标识)、新创建的(红色标识)、已经暂存但未提交的文件(白色标识)

3、然后通过`git add 某文件(git add . 添加全部)`添加刚才我们新建的a.txt文件

4、然后通过`git commit -m "备注信息"`,提交本次内容

以上4步的操作效果截图如下:

5、我们利用上述指令,在往demo文件夹中添加一个b.txt文件,然后通过`git log`查看我们的操作记录,然后可以查询到我们添加a.txt和b.txt的log日志,然后通过`git reset --hard b96f962d0f835e3114b6f51bf7c9bfe6125626e3`,去回退到我们的操作节点,此时我回退到第一次添加文件节点,也就是demo文件夹只有一个a.txt文件,以下是git端的效果截图

6、此时查看`git log` 结果发现只有一条操作记录,也就是我们添加的a.txt的记录,我们之前进行的第二步操作呢?也就是添加的b.txt文件节点时,我们如何回退到最后这个节点呢?我们可以利用`git reflog`

7、此刻demo文件夹中的2个文件内容,a.txt文本如下:

  1. 初始化内容

b.txt文本内容如下:

  1. 这是b文本内容

我们继续为b.txt添加如下记录信息

  1. 我们临时为b添加记录

此刻b.txt文件内容如下:

  1. 这是b文本内容
  2. 我们临时为b添加记录

上述意思就是在更新`b.txt`文件内容,添加操作记录如果用到开发场景,我们在**需求1**,然而由于工作需要,**需求1**需要暂且搁置,我们需要做**需求2**,**需求1**代码需要砍掉,等我们做完**需求2**,我们继续需要获取我们之前**需求1**的代码,我们可以利用`git stash`命令,以下是该命令的含义

  1. git stash             将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
  2. git stash list        查看“某个地方”存储的所有记录
  3. git stash clear     清空“某个地方”
  4. git stash pop       将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
  5. git stash apply     编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突)
  6. git stash drop      编号,删除指定编号的记录

这次会有冲突,我们需要解决冲突,即可

8、我们可以通过`git branch` 查看我们的项目所有分支,默认只有一个`master`主分支,我们可以通过`git branch dev`(dev是我们起的分支名)新建一个分支,名字是dev开发分支,然后通过`git checkout dev`切换到我们新建的dev分支,我们也可以通过`git checkout -b 分支名`一并实现创建、切换分支的功能

9、我们切换到`dev`分支,通过`touch 文件名`创建一个文件,然后add、commit ,意思就是在dev分支上做一些修改,并保存在dev分支上,然后在切回master分支,我们要做的就是将dev上更新的内容,也在master上做同样的修改,我们可以用`git merge` 分支名,将dev上的更新内容,合并到master上另外删除分支使用`git branch -d 分支名`

10、利用`github`创建项目,会出现如下指令,需要在git终端输入创建生成项目,要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,运行 git remote add [shortname] [url]:

通过`git remote add origin 和https://github.com/iyongfei/test.git`

11、接下来我们通过`git clone https://github.com/iyongfei/test.git`来`clone`下载我们的`github`项目,我们默认拉取的是`master`分支(默认分支可以在**github**设置其他分支)

然后根据以前的git指令,进行`git add .` 和 `git commit -m "备注信息"`,

注意注意,由于项目开发都是协同开发,我们在接下来在提交代码之前,需要`git pull origin 分支`,拉取对应分支代码,然后如果有冲突解决冲突,然后在`git push origin 分支名`

ps:我如下的截图在提交代码时,为了简化操作,没有`git pull`

12、我们还可以往`github`项目上添加新分支,我们通过`git branch 分支`创建分支,通过`git checkout 分支`切换分支,(或者通过`git checkout -b 分支`,创建并切换分支),然后在添加、提交(我这里没有添加任何信息),最后`git push origin dev` 往github项目上添加新分支

13、我们还可以拉取其他分支的内容到本分支,比如我在`master`上添加内容,然后我在`dev`分支上去拉取`master`上的代码,然后在提交到对应的github分支`dev`上(我本地依然没有添加额外的内容)

14、冲突如何产生?我们如何解决冲突?当自己拉取了`dev`的代码,同事也拉取了`dev`的代码,同事先于我提交代码,然后自己也在本地修改了代码,如果修改了同一个文件,会出现冲突情况,再次拉取`dev`代码会失败,而且提交失败

解决方式一:先在自己本地`dev`,通过`git stash`暂存修改,然后`git pull 分支`代码,再然后`git stash pop` 合并代,解决冲突(删掉我们不需要的代码),然后在提交代码

  1. <<<<<<< Updated upstream
  2. aa为各个
  3. bb额外分
  4. =======
  5. aac
  6. bbd
  7. >>>>>>> Stashed changes

解决方式二:不利用`git stash`,利用`compare`对比软件,将有冲突的文件,剪切出来,然后拉取`dev`分支代码,就把github的`dev`分支最新代码,同步下来,然后在跟自己的剪切出来的代码段,进行对比,将自己的代码更新到同步下来的代码,然后在提交到github对应的分枝上

########################以下是项目中的截图########################

1、首先进入项目的主分支

2、Fork一份工程,当做自己的项目管理分支

3、在电脑上创建一个文件夹,先Clone一份自己工程的项目分支(xxx屏蔽公司信息)

git clone git@xxxx.gitlab.com:xxxxxx/SELand_Vertu

4、进入项目的二级目录进入git客户端,确认要pull分支

git branch看看当前的分支

git checkout -b develop  切换到develop分支,因为我要pull拉去develop分支上的项目

5、然后在将自己的项目分支同步项目主分支(我们项目分支为develop分支)

git pull git@xxx.gitlab.com:xxx/SELand_Vertu develop

6、每次提交代码时候,需要先同步项目主分支代码

git status是哪些文件有所修改

git diff 可以查询所修改的代码

git add -A 增加自己所做的修改

git commit -a 提交所有修改的代码

git push origin develop 提交代码

7、最后在new merge request,提交给相应的负责人,进行merge代码

错误解决::::

如果某个同事提交代码,老大没有及时merge代码,自己也提交该文件的代码,那么老大merge代码会有冲突

会差生如下的错误提示:

Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.

可以这样修改

1、git pull git@xxx.gitlab.com:xxx/SELand_Vertu develop先同步一下会出现以上的错误

2、pull会使用git merge导致冲突,需要将冲突的文件resolve掉 git add -u,

3、在项目中看看哪些代码是对方改的,哪些代码是自己修改的,在合并成一份最新的代码

4、git commit之后才能成功

Git命令提交项目代码的更多相关文章

  1. git 命令提交项目到github

    git 命令提交项目到github步骤如下: 1.使用git 命令客户端进入项目根路径,输入 git init  命令,创建github本地根目录 2.把文件加入到本地项目 git add .  ,如 ...

  2. git命令提交项目

    相关的操作命令,总是忘记,故在此记录下: 此为linux下的命, windows的话,去掉sudo即可 1.进入项目代码根目录,执行: sudo git init 把这个目录变成git可以管理的仓库. ...

  3. git 命令提交项目到git服务器

    1.先下载git,然后安装git https://git-scm.com/downloads 2.在电脑任意盘创建一个目录 3.在创建的目录下点击右键 4.初始化git 使用git init 初始化, ...

  4. 如何通过Git命令行把代码提交到github上

    1.http://www.cnblogs.com/leesf456/p/5169765.html   参考博客 背景:最近入手了mac,看见mac上的大神都是在用git命令行推代码,我很羡慕有木有,好 ...

  5. GIT命令行统计代码提交行数

    项目中遇到写报告的时候要反馈某个人或者某个功能的代码量,又没有集成CI这些插件,可以简单的用GIT命令统计下代码提交量: --统计某个人的提交代码 git log --author="old ...

  6. git 命令合并分支代码

    git 命令合并分支代码 对于复杂的系统,我们可能要开好几个分支来开发,那么怎样使用git合并分支呢? 合并步骤: 1.进入要合并的分支(如开发分支合并到master,则进入master目录) git ...

  7. 从coding.net 克隆(git clone)项目代码到本地报无权限(403)错误 解决方案

    直接从coding.net (git clone)项目代码到本地时,会提示没有权限的错误,如下图: 解决方案:添加远程地址的时候带上用户名及密码即可解决,格式如下: git clone http:// ...

  8. 如何使用Git命令克隆仓库代码

    今天我的电脑装了新系统,刚装了Git到电脑上,突然有一个大胆的想法,以后不适用可视化工具了. 要逐步锻炼我的命令的操作能力,不能太依赖可视化工具. 今天先记录一下如何使用git命令克隆仓库代码 git ...

  9. AndroidStudio第一次提交项目代码到git服务器/github

    虽然使用AndroidStudio(以下简称as)开发并使用git管理代码已经有很长时间,但是第一次提交项目到git依然会很不顺利,网上的文章或许因为所使用版本比较老,并不一定完全凑效,因此写此笔记做 ...

随机推荐

  1. [agc008E]Next or Nextnext-[dp+思考题]

    Description 传送门 Solution 官方题解 然后我谈下个人理解.由于我们的两个条件只要任意满足,则在p的图中i有两种连边法:i->p[i],i->p[p[i]]. 我们考虑 ...

  2. 苏州Uber优步司机奖励政策(4月22日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  3. python线程的使用模式

    为了解决阻塞(如I/O)问题,我们需要对程序进行并发设计. 本文将通过将线程和队列 结合在一起,轻松地在 Python 中完成线程编程,创建一些简单但有效的线程使用模式. 一.使用线程 先看一个线程不 ...

  4. Design3:数据层次结构建模之二

    SQL Server提供了一个新的数据类型 HierarchyID,用来处理层次结构的数据,这个数据类型是系统内置的CLR数据类型,不需要专门激活 SQL/CLR 功能即可使用.当需要表示各值之间的嵌 ...

  5. Eclipse启动Tomcat错误:Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are already

    Eclipse启动Tomcat错误: Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are alread ...

  6. 不把DB放进容器的理由

    原文地址:http://www.tuicool.com/articles/6VbqeqQ 原文为英文,以下是笔者的个人总结. 此处的DB包括但不限于Redis.ElasticSearch. 1.数据安 ...

  7. BLACKPYTHON学习(一)

    C/S结构了解 所谓的C/S就是客户端(client)和服务器端(server)的简称,也就是在基于这个的基础上编写相关的代码:一个就是客户端一个就是服务端. TCP(client) 客户端编写 #因 ...

  8. 如何获取c:forEach里面点击时候的值

    1.c:forEach遍历输出 <c:forEach items="${data}" var="item" > <a onclick=&quo ...

  9. SICP读书笔记 2.1

    SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...

  10. Django_cookie+session

    一.cookie和session介绍 cookie 由服务器产生内容,浏览器收到请求后保存在本地:当浏览器再次访问时,浏览器会自动带上cookie,这样服务器就能通过cookie的内容来判断这个是“谁 ...