Git 命令初识

news/2024/11/8 12:19:08/

取自:http://www.cnblogs.com/wupeiqi/p/7295372.html

Git 是一个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。 Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发。Git 是根据GNU通用公共许可证版本2的条款分发的自由/免费软件,安装参见:http://git-scm.com/

GitHub是一个基于Git的远程文件托管平台(同GitCafe、BitBucket和GitLab等)。

Git本身完全可以做到版本控制,但其所有内容以及版本记录只能保存在本机,如果想要将文件内容以及版本记录同时保存在远程,则需要结合GitHub来使用。使用场景:

  • 无GitHub:在本地 .git 文件夹内维护历时文件
  • 有GitHub:在本地 .git 文件夹内维护历时文件,同时也将历时文件托管在远程仓库

其他:

    集中式:远程服务器保存所有版本,用户客户端有某个版本
    分布式:远程服务器保存所有版本,用户客户端有所有版本

 

命令

 

  • git init,初始化,表示即将对当前文件夹进行版本控制。
  • git status,查看Git当前状态,如:那些文件被修改过、那些文件还未提交到版本库等。
  • git add 文件名,将指定文件添加到版本库的暂存状态。
  • git commit -m '提交信息',将暂存区的文件提交到版本库的分支。
  • git log,查看提交记录,即:历史版本记录

stash相关常用命令:

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

branch相关常用命令:

  • git branch 分支名称             创建分支
  • git checkout 分支名称          切换分支
  • git branch -m 分支名称        创建并切换到指定分支
  • git branch                          查看所有分支
  • git branch -d 分支名称         删除分支
  • git merge 分支名称              将指定分支合并到当前分支

GitHub相关操作实例:

--家里
git remote add origin https://github.com/iTudou/pondo.git    # 为地址起一个别名origin
git push origin master                    # 将本地master分支内容以及版本信息推送到GitHub
Username for 'https://github.com':                # 输入GitHub用户名
Password for 'https://iTudou@github.com':             # 输入GitHub密码
git push origin dev                      # 将本地dev分支内容以及版本信息推送到GitHub
--公司
git clone https://github.com/iTudou/pondo.git              # 将项目从GitHub中获取
cd pondo/
git Branch                          # 默认获取到得只有master分支
git branch dev origin/dev                             # 创建dev分支且和远程dev分支同步
git checkout dev                                # 切换到dev分支
vim app01/views.py                     # 继续开发新功能
git add .                             # 添加文件到版本库的暂存状态
git commit -m '公司开发功能1'                    # 提交新功能到版本库的分支
git push origin dev                       # 提交dev分支内容到远程GitHub托管仓库的dev分支
--家里
git checkout dev                      # 切换到dev分支
git pull origin dev                        # 从远程GitHub仓库获取dev分支最新内容,并合并到本地
vim app01/views.py                      # 继续开发新功能
git add .                         # 添加文件到版本库的暂存状态
git commit -m '家里开发功能1'                                # 提交新功能到版本库的分支
--公司
git checkout dev                           # 切换到dev分支
git fetch origin dev                        # 从GitHub仓库获取dev分支最新内容到版本库的分支
git merge origin/dev                                # 将版本库的分支内容合并到工作区
vim app01/views.py                                           # 继续开发新功能
git add .                         # 添加文件到版本库的暂存状态
git commit -m 'xxxxxxxxxxx'                    # 提交新功能到版本库的分支

注:

【git pull origin 分支】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】,并且在执行过程中可能会出现冲突,原因是由于本地代码和获取的最新代码有重合部分,那么就需要自己手动解决冲突然后再继续开发。

 

协同开发命令和以上步骤类似:

  • 创建程序
    • 用户A创建程序,提交到GitHub
    • 用户B克隆项目
    • 用户C克隆项目
  • 开发功能
    • 用户A开发功能1
    • 用户B开发功能2
    • 用户C开发功能3
  • 提交
    • 用户A提交功能1,并push(A用户手速快,先提交。)
    • 用户B提交功能2,无法push,因为GitHub上已经有其他人提交的新代码。
      解决方法:从GitHub上获取最新代码并合并到本地,提交自己开发的功能2。
    • 用户C提交功能3,无法push,无法提交,因为GitHub上已经有其他人提交的新代码。
      解决方法:从GitHub上获取最新代码并合并到本地,提交自己开发的功能3。
  • 获取最新代码
    • 用户A获取最新代码
    • 用户B获取最新代码
    • 用户C获取最新代码

在上面红色标注的解决方法位置可以有三种方式操作,三者都可以完成合并并提交新功能,但是日志记录会有差异,如:前两者版本记录中会出现合并,而第三种可以保证版本记录干净整洁。

    • 先 git pull origin master   然后 git push origin master
    • 先 git fetch origin master 然后 git merge origin/master   再 git push origin master
    • 先 git fetch origin master 然后 git rebase origin/master  再 git push origin master                                                

转载于:https://www.cnblogs.com/liwenzhen238/p/7742061.html


http://www.ppmy.cn/news/917799.html

相关文章

php生成目录树

为什么80%的码农都做不了架构师&#xff1f;>>> <?php $dir E:\AppServ\www\alpaca\app;function recurDir($pathName) {$result array();$tmp array();if( !is_dir($pathName) || !is_readable($pathName) ){return null;}$allFiles scandir($pathName);f…

React Render Props 模式

为什么80%的码农都做不了架构师&#xff1f;>>> 概述 Render Props模式是一种非常灵活复用性非常高的模式&#xff0c;它可以把特定行为或功能封装成一个组件&#xff0c;提供给其他组件使用让其他组件拥有这样的能力&#xff0c;接下来我们一步一步来看React组件中…

spring boot整合scala和spark做大数据预言

原来用jetty 和 restful 做过驱动spark的计算框架&#xff0c;最近想用spring boot scala spark 重新做一个&#xff0c;一下是pom.xml 和代码分享 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.o…

matlab学习笔记三(11.2)

1.clear 的功能:清除工作间的变量。 通常的形式: 1.lear :清除工作间的所有的变量。 2.clear var:清除名为var的变量。可以 clear var*来清除所有以var开头的变量名。 >> my_func=@sinmy_func = @sin>> my_m=magic(3)my_m =8 1 63 5 74 …

golang实现ftp实时传输文件

一、项目简介 本项目主要实现的功能是ftp客户端不断地将xml文件和jpg文件实时地上传到服务器&#xff0c;当然也可以是其他格式的文件。每当ftp客户端取到一个文件之后&#xff0c;将文件上传到服务器后&#xff0c;然后将其删除。项目实现可配置&#xff0c;如果开发者有类似…

MFC第十七天 CFont类与LOGFONT结构体、记事本文件打开和保存及是否保存的逻辑流程分析、PreTranslateMessage虚函数与快捷键

文章目录 CFont类与LOGFONT结构体CFontDialog字体信息结构体与HFONT句柄的关系 记事本文件拖入、打开和保存及是否保存的逻辑流程分析PreTranslateMessage虚函数与快捷键附录 CFont类与LOGFONT结构体 CFontDialog 构造函数介绍 public: //用于指定字体对话框的初始字体属性&…

Opencv学习_3 (Opencv读取视频 视频进度控制 写视频)

opencv读取视频&#xff1a; 使用opencv读取视频主要用到这几个函数&#xff1a;cvCreateFileCapture cvQueryFrame (或cvGrabFrame cvRetrieveFrame) cvReleaseCapture。 1&#xff1a;简单介绍&#xff1a; CvCapture是一个结构体&#xff0c;用来保存图像捕获所需要的信息…

Spring+SpringMVC+Mybatis整合【L】

我喜欢直接上代码&#xff0c;这里做个解说&#xff0c;代码下载 http://download.csdn.net/detail/q260996583/9905047 项目框架图&#xff1a; 1、pom.xml 文件内容 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/20…