Git版本控制

文章目录

零、 常用命令

python 复制代码
"""更新"""
git fetch -p   # 拉最新代码到本地
git rebase     # 合并
# 前两个可以合并为 git pull --rebase
git fetch <remote>:                   # 将远程->本地。包括远端的所有分支。不会自动与本地合并。
git fetch origin feature/xyy_R5.18.10.073-2   # 只更新远端一个分支的代码
git rebase <origin/master>             # 与本地合入

"""第一次提交 或 前几次提交已合入"""
git add 文件名   # 保存到暂存区,文件是已暂存状态(staged)
git add .        # 所有文件保存在暂存区
git commit -m "消息内容"   # 提交暂存区中的内容到本地仓库,文件是已提交转台(committed)
git review 分支名  # 默认master,提交到远端仓库

"""第二+次提交,第一次未合入"""
git add 文件名           
git commit --amend     # 合并之前的提交
git review 分支名


git stash     # 放入垃圾桶
git stash pop # 从垃圾桶拿出

"""已提交到远程git仓库,被abandon后,本地需要回退"""
git reset
git reset --soft HEAD^

"""分支"""
# 分支合入master:
git checkout master
git merge 分支名
git push origin master或git push

#提交两个分支:
cherry pick change to another branch

新建: git branch 新分支名      # 例:git branch testbranch
查询: git branch
切换: git checkout 分支名      # 例:git checkout master
git branch -r      #查看远程所有分支
git branch -a     #查看本地和远程所有分支
git branch -b <name>   #新建分支
git branch -d <name>   #删除本地分支
git branch <name>     #创建name分支

git rebase master
git add .
git commit -s -m "代码修改描述"

一、 版本控制

版本控制 (Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。

简单说就是用于管理多人协同开发项目的技术。

作用

  • 实现跨区域多人协同开发
  • 追踪和记载一个或者多个文件的历史记录
  • 组织和保护你的源代码和文档
  • 统计工作量
  • 并行开发、提高开发效率
  • 跟踪记录整个软件的开发过程
  • 减轻开发人员的负担,节省时间,同时降低人为错误

常见的版本控制工具

Git

SVN(Subversion)

CVS(Concurrent Versions System)

VSS(Micorosoft Visual SourceSafe)

TFS(Team Foundation Server)

Visual Studio Online

版本控制分类

  • 本地版本控制
  • 集中版本控制:SVN、CVS、VSS 所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改
  • 分布式版本控制:Git 所有版本信息仓库全部同步到本地的每个用户,但这增加了本地存储空间的占用。

二、 Git介绍

Git是免费的、开源的,最初Git是为辅助Linux内核开发的,来替代BitKeeper!

2.1.安装Git

卸载:反安装+清理环境变量

打开[git官网]https://git-scm.com/ ,下载git对应操作系统的版本

官网下载太慢,我们可以使用淘宝镜像下载http://npm.taobao.org/mirrors/git-for-windows/

安装:无脑下一步

启动Git:开始菜单、或任意文件夹下右键

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

Git CMD:Windows风格的命令行

Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

2.2.Git配置

python 复制代码
git config -l		     # 查看所有配置文件,其实都保存在本地
git config --system --list  # 只查看系统配置
git config --global --list   # 查看当前用户(global)配置,即本地配置

配置文件所在电脑位置:

python 复制代码
Git\etc\gitconfig :Git               安装目录下的 gitconfig     --system 系统级
C:\Users\Administrator\.gitconfig    只适用于当前登录用户的配置  --global 全局

2.3 Git四个区域

  • 工作目录(Working Directory) 工作区Workspace 平时存代码
  • 暂存区(Stage/Index) 临时存改动,本质是文件
  • 资源库(Repository或Git Directory) 本地仓库 安全存放数据的位置,有所有版本。HEAD指向最新放入仓库的版本
  • 远程的git仓库(Remote Directory) 远程仓库 托管代码的服务器

2.4.工作流程

1、在工作目录中添加、修改文件; 如 UserMap.xml

2、将需要进行版本管理的文件放入暂存区域; git add . 点表示暂存所有文件

3、将暂存区域的文件提交到git仓库。 git commit

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

2.5.Git项目搭建

搭建仓库的2种方式:

python 复制代码
本地仓库搭建:  git init        会生成一个.git隐藏文件
克隆远程仓库:  git clone [url]

2.6.Git文件操作

文件的四种状态

  • Untracked : 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !

  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

查看文件状态

python 复制代码
git status [filename]
git status                查看所有文件状态

git add .                  添加所有文件到暂存区
git commit -m "消息内容"    提交暂存区中的内容到本地仓库 -m 提交信息

忽略文件 :

有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等

在主目录下建立".gitignore"文件,规则如下:

  • 忽略文件中的空行或以井号(#)开始的行将会被忽略。
  • 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等。
  • 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
  • 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
  • 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
python 复制代码
#为注释
*.txt        #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
!lib.txt     #但lib.txt除外
/temp        #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/       #忽略build/目录下的所有文件
doc/*.txt    #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

三、Gerrit使用

3.1 第一次使用时配置

1)生成密钥:ssh-keygen -t rsa -C "xxx@baidu.com.cn",

在用户根目录~/.ssh下有2个文件 id_rsa, id_ras.pub

打开id_rsa.pub文件,复制内容到http://gerrit.baidu.com.cn/#/settings/ssh-keys的SSH Keys

2)、设置用户名和邮件,用于每次提交的时候的显示,使用--global参数则本机只需要设置一次。

python 复制代码
git config --global user.name 中文姓名+工号 如"张三11111111"
git config --global user.email xxx.xxx@baidu.com.cn
git config --list

3)、安装git-review插件 :切换到root,sudo su命令,运行pip3 install git-review

4)、配置gitreview参数

python 复制代码
git config --global gitreview.user 姓名工号
git config --global gitreview.email xxx.xxx@baidu.com.cn

# git config --global gitreview.remote origin

5)、本地关联远程仓库:切到所需目录
git remote add origin http://00332949@gitlab.baidu.com.cn/person/a/00332949/CS_test 需要ssh密钥

在这条命令中,git会自动将远程仓库的名字设置为origin,方便我们的后续操作。

python 复制代码
git remote add gerrit ssh://00332949@gitlab.baidu.com.cn:29418/00332949/CS_test
查看git对应的远程仓库地址: 
git remote -v
git remote rm 仓库名     删除远程链连接

5)clone文件:切到要存的目录下,

git clone ssh://00332949@gitlab.baidu.com.cn:29418/00332949/CS_test

git clone -b master ssh://00332949@gitlab.baidu.com.cn:29418/00332949/CS_test #指定分支下载

默认应该在master分支下,接下来千万别急着用git checkout -b 切换到小组的分支,否则会导致新建了一个跟小组分支名字一模一样的分支,而自己还在主分支master下。为避免以上错误,任何时候切换分支时都不要用 -b ,只在新建分支时才用 -b。

当第一次在远程界面上新建一个仓库时,下载空文件夹时,会报信息:

以上信息没问题,本地会下载好空文件夹。

相关推荐
YoungHong199211 小时前
Git删除本地已经merge到远程的分支
git
内核程序员kevin16 小时前
GitHub新手入门 - 从创建仓库到协作管理
git·github
南城巷陌19 小时前
node.js实现批量修改git项目的数据源
git·node.js·修改git项目数据源
动不了一点1 天前
关于git使用的图文教程(包括基本使用,处理冲突问题等等)超详细
git
joan_851 天前
git提交顺序为什么是:add,conmmit,pull,push
git
yangmc042 天前
二维前缀和 子矩阵的和
c语言·数据结构·c++·git·算法·矩阵·图论
W、明义2 天前
IDEA git提交时如何忽略某个文件或文件夹
java·git·intellij-idea
我是哈哈hh2 天前
Linux环境基础开发工具的使用_yum源_vim_Git控制器
linux·运维·c++·git·vim·1024程序员节
待磨的钝刨2 天前
四期书生大模型实战营(【基础岛】- 第1关 | 书生·浦语大模型开源开放体系)
linux·服务器·git·python
single5942 天前
c++学习:封装继承多态
开发语言·c++·git·vscode·学习