GIT使用教程(超详细)

目录

前言

[1 git安装](#1 git安装)

[2 增加git账户](#2 增加git账户)

[3 git全局参数配置](#3 git全局参数配置)

[4 创建本地仓库](#4 创建本地仓库)

[5 关联远程分支](#5 关联远程分支)

[6 删除远程分支关联](#6 删除远程分支关联)

[7. 删除分支](#7. 删除分支)

[8 git stash](#8 git stash)

[9 git reset](#9 git reset)

[10 git checkout](#10 git checkout)

[11 合并](#11 合并)

[12 git log](#12 git log)

[13 git提交模板](#13 git提交模板)


前言

Git是一个免费的分布式版本控制系统,最初由Linus Torvalds开发用于管理Linux内核代码。

下面是一些关于Git的关键点:

  1. 分布式版本控制系统:与集中式版本控制系统不同,Git的每个用户都拥有完整的代码仓库副本,这意味着即使离线,仍然可以继续进行代码管理和更改。
  2. 版本控制:Git可以记录文件的每个版本和修改,可以轻松地查看和比较不同版本之间的差异。
  3. 分支管理:Git非常强大的特性之一是分支管理。它允许创建不同的分支来独立开发功能或修复问题,而不会对主分支造成影响。分支可以合并回主分支,以获得最新的更新。
  4. 团队协作:Git允许多人同时在同一个项目上工作。可以将自己的更改推送到共享的代码仓库,并从其他人那里获取他们的更改,从而实现协同开发。
  5. 提交和推送:Git使用提交(commit)来保存代码的更改,可以包含有关更改的注释以便他人理解本次提交。推送(push)将本次提交上传到共享的代码仓库。
  6. 分布式存储:Git使用SHA-1散列算法对文件进行唯一标识和存储,这意味着即使自己的代码仓库出现故障,仍然可以通过克隆远程仓库来恢复所有历史记录和更改。

总之,Git是一个强大而灵活的版本控制系统,适用于个人开发者和团队协作,使版本控制和代码管理变得更加简单和可靠。

1 git安装

sudo apt-get install git-core openssh-server openssh-client

2 增加git账户

sudo useradd -m git

sudo passwd git

3 git全局参数配置

/*去掉diff时文件权限的差异*/

git config --add core.filemode false

/*去掉diff时换行符的差异*/

git config --global core.whitespace cr-at-eol

4 创建本地仓库

cd /home/work/test

git init

git add .

git commit . -m "a commit message"

5 关联远程分支

将本地分支关联到远程分支上

git remote add origin git@10.8.0.3:test/test.git

第一次推送版本

git push --set-upstream origin master

非初次提交

git push origin master

6 删除远程分支关联

查看远程分支

git branch -r

git remote rm origin

7. 删除分支

  • 利用"git branch --delete dev"命令删除本地分支;
  • 利用"git push origin --delete branch"命令删除远程分支;
  • 利用"git branch --delete --remotes 远程分支"命令删除追踪分支,该操作并没有真正删除远程分支,而是删除的本地分支和远程分支的关联关系,即追踪分支

8 git stash

/*保存当前工作进度,会把暂存区和工作区的改动保存起来。执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。使用git stash save 'message...'可以添加一些注释*/

git stash

/*显示保存进度的列表。也就意味着,git stash命令可以多次执行*/

git stash list

/*恢复,通过git stash pop命令恢复进度后,会删除当前进度*/

git stash pop [--index] [stash_id]

git stash pop //恢复最新的进度到工作区。git默认会把工作区和暂存区的改动都恢复到工作区。

git stash pop --index //恢复最新的进度到工作区和暂存区。(尝试将原来暂存区的改动还恢复到暂存区)

git stash pop stash@{1} //恢复指定的进度到工作区。stash_id是通过git stash list命令得到的

/*除了不删除恢复的进度之外,其余和git stash pop 命令一样*/

git stash apply [--index] [stash_id]

/*删除一个存储的进度。如果不指定stash_id,则默认删除最新的存储进度*/

git stash drop [stash_id]

/*删除所有存储的进度*/

git stash clear

9 git reset

撤回到暂存区

git reset HEAD filename 撤回指定文件

git reset . 撤回所有文件,注意后面还有个.

git reset --hard HEAD 硬复位,丢弃当前所有修改,分支复位到HEAD

git reset --soft HEAD 软复位,所有修改存放到暂存区,分支复位到HEAD

注意:reset 如果不加参数,那么默认使用 --mixed 参数。它的行为是:保留工作目录,并且清空暂存区。也就是说,工作目录的修改、暂存区的内容以及由 reset 所导致的新的文件差异,都会被放进工作目录。简而言之,就是「把所有差异都混合(mixed)放在工作目录中」。

10 git checkout

git checkout命令用于切换分支或恢复工作树文件。git checkout是git最常用的命令之一,同时也是一个很危险的命令,因为这条命令会重写工作区 。

切换分支:

本地分支切换

git checkout 分支名

切换远程分支同时创建本地分支

git checkout -b 创建的本地分支名 远程分支名

恢复工作区文件

恢复该目录下所有文件,和HEAD指向的位置保持一致

git checkout .

恢复指定文件

git checkout test.cpp

11 合并

切换到主分支,执行git merge 次分支, 则次分支合并到主分支上。

12 git log

git log命令用于显示提交日志信息。

显示全部的版本历史

git log

显示整个提交历史记录,但跳过合并

git log --no-merges

查询ID之前的记录,包含commit

git log commit_id

查询commit1与commit2之间的记录,包括commit1和commit2

git log commit1_id commit2_id

显示每个版本修改的文件

git log --stat

显示每个版本具体的修改

git log -p

13 git提交模板

/*设置模板

git config commit.template 绝对路径/[模板文件名] //这个命令只能设置当前分支的提交模板

git config --- ---global commit.template 绝对路径/[模板文件名] //这个命令能设置全局的提交模板,注意global前面是两杠

例如:

git config commit.template 绝对路径/xxx_template

git config --global commit.template 绝对路径/xxx_template

/*设置文本编辑器,命令如下:

git config --global core.editor [编辑器名字]

例如:git config --global core.editor vi

/*编辑模板提交代码,命令如下

git commit

相关推荐
CYRUS STUDIO8 分钟前
ARM64汇编寻址、汇编指令、指令编码方式
android·汇编·arm开发·arm·arm64
起名字真南14 分钟前
【OJ题解】C++实现字符串大数相乘:无BigInteger库的字符串乘积解决方案
开发语言·c++·leetcode
少年负剑去14 分钟前
第十五届蓝桥杯C/C++B组题解——数字接龙
c语言·c++·蓝桥杯
lucy1530275107914 分钟前
【青牛科技】GC5931:工业风扇驱动芯片的卓越替代者
人工智能·科技·单片机·嵌入式硬件·算法·机器学习
cleveryuoyuo15 分钟前
AVL树的旋转
c++
神仙别闹38 分钟前
基于MFC实现的赛车游戏
c++·游戏·mfc
小c君tt1 小时前
MFC中 error C2440错误分析及解决方法
c++·mfc
木向1 小时前
leetcode92:反转链表||
数据结构·c++·算法·leetcode·链表
阿阿越1 小时前
算法每日练 -- 双指针篇(持续更新中)
数据结构·c++·算法
hunandede2 小时前
FFmpeg存放压缩后的音视频数据的结构体:AVPacket简介,结构体,函数
c++