Centos安装高版本git

由于 centos7 默认安装的是最高版本的 git 是 1.8 版本,很多场景都要求 git的版本要高一些,所以需要安装升级,主要有两个办法:

  1. 可以使用编译安装,不过太麻烦。
  2. 是yum安装,会比较简单,本文就是用这个办法。

首先,启用 Wandisco GIT 存储库

vim /etc/yum.repos.d/wandisco-git.repo

写入以下内容

[wandisco-git]
name=Wandisco GIT Repository
baseurl=http://opensource.wandisco.com/centos/7/git/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco

然后,导入存储库 GPG 密钥

sudo rpm --import http://opensource.wandisco.com/RPM-GPG-KEY-WANdisco

最后,安装 Git 即可

yum install git

常用命令

git init

初始化你的Git项目。第一次初始化仓库,经常是使用下面的这个流程:

git init
git remote add origin git@code.aliyun.com:**/v*te.git
git add .
git commit
git push -u origin master

git remote

查看远程仓库

git remote -v

添加远程仓库,git init 之后没有远程仓库,可以用下面这个命令添加:

git remote add origin git@code.aliyun.com:i****.git

修改远程仓库,需要先删除然后再添加

git remote remove origin
git remote add origin git@code.aliyun.com:i****.git

git merge

有时候冲突太多想放弃合并,只有存在冲突的时候才可以使用这个命令

git merge --abort

git branch

删除本地分支,如果分支未合并的话,默认是不允许删除的,需要强制删除,删除远程分支的见git push 命令。

# 要切换到其它分支下
git branch -d branchName
# 强制删除
git branch -D branchName

查看本地查看有哪些分支

# 查看本地分支
git branch

# 按提交日期排序
git branch --sort=-committerdate 

# 查看远程分支
git branch -r

# 查看本地和远程的分支,也就是所有分支
git branch -a

查看所有本地分支所对应的上游分支,以及本地和上游分支领先和落后多少个提交

git branch -vv

设置本地分支跟踪的远程分支

# -u与--set-upstream-to
git branch -u origin/dev

git pull

用于将远程的提交,拉取到仓库,并且合并到当前分支。

当省略参数的时候,直接拉取和本地分支一样的远程分支,并且合并到当前分支

git pull

当带上分支名称的时候,是拉去该分支,并且合并到本地分支

git pull 远程分支名称

拉取并且删除远程已经不存在的本地分支

git pull -p
git pull --prune

git config

该命令,用于配置git。三个配置文件,可以手动编辑配置,也可以使用 git config 命令修改

  1. .git/config 文件,作用于当前目录,优先级第一
  2. ~/.gitconfig 文件,作用于特定用户,优先级第二
  3. 安装目录/etc/gitconfig 文件,作用于当前 git 安装,优先级最后

配置文件的语法格式:

  1. 注释使用分号
  2. 配置项 8 个空格,例如
; 别名配置
[alias]
        st = status
        co = checkout
        br = branch
        ci = commit

; 用户名称配置
[user]
        name = wuqiyin
        email = silverwq@qq.com

; http代理配置
[http]
        proxy = socks5://127.0.0.1:1080
[https]
        proxy = socks5://127.0.0.1:1080

git config --list 或者 git config -l,

# 默认是--local级别
git config [--system|--global|--local] -l
git config --list
# 查看具体的某个配置
git config user.name

git config --add

# 默认是--local级别
git config [--system|--global|--local] --add user.name wuqiyin

git config -e

# 默认是--local级别
git config [--system|--global|--local] -e

git config --unset

# 默认是--local级别
git config [--system|--global|--local] --unset user.name

git revert

该命令主要功能是回滚已经推送远程的提交,产生一个和该提交相反的修改提交。

# 产生一个和该提交相反的修改提交
git revert [commit_id]

需要注意的是:如果一个文件被rever了,后续合并该文件,如果该文件没有改变,则无法合并过来,也就是感觉文件丢失的感觉

git reset

这个命令主要用于恢复已经提交或者暂存的修改,禁止对已经push到远程仓库的提交进行reset。

恢复到指定提交

# --hard 参数,不保留本地修改
git reset --hard [commit_id]

# 省略commit_id ,将会使HEAD重置到当前分支的最新提交,这可能会导致丢失未提交的更改
git reset --hard

# 保留本地修改
git reset [commit_id]

取消暂存

# 文件的修改还是会保留住,HEAD 指针指向本分支的最新的提交
git reset HEAD <file>
# 这个命令也可以
git restore --staged <file>

# 好像只有这个命令才可以
git rm --cached <file>

git checkout

这命令功能比较多,可以用于恢复本地内容的修改,可以用于切换分支,创建分支等。

放弃本地的修改

# 可以对单个文件,或者目录中的文件进行恢复
git checkout -- <file>

切分支

# 切换到已经存在的分支
git checkout 分支名称

创建并且切到新创建的分支

# 默认从当前所在的分支切出新的分支
git checkout -b 新的分支名称
# 也可指定从哪个分支切出
git checkout -b master 新的分支名称

git commit

用将修改提交到版本库中。

注释并提交,可以跳过在vim编辑器中添加注释的过程

git commit -m '说明信息'

提交时候显示文件修改内容

git commit -v

暂存修改文件并提交,可以省去 git add 的操作

git commit -a -m '备注'

注意: -a 参数不会把未加入版本库的新文件,加入到版本库中

合并提交,单词读音 /ə'mend/,改正的意思,如果修改较多,不建议合并,不然合并两个提交会有很多的冲突

# 本次提交合并到上次提交id中,也就是说改正上一次提交的内容
git commit --amend

优秀的Git commit信息遵循的七个规则:

  1. 用一个空行分开主题与正文
  2. 限制主题行到50个字符,因为主题经常作为邮件的标题
  3. 主题行用大写字母开头
  4. 主题行末尾不要用句号
  5. 主题行要用祈使语气
  6. 正文要在72个字符处时换行
  7. 用正文解释what 和 why 而不是how

git add

缓存单个文件

git add 文件路径名称

缓存所有文件

git add -A
git add *

缓存目录下的所有文件和目录

git add 目录名称

交互式缓存,有时候不想缓存文件的所有修改,只想缓存其中的某一个地方的修改,选择其中想要缓存的修改

git add -p 文件或者目录

进入交互之后,有以下这些选项:

  1. 使用 y 缓存某一处更改
  2. 使用 n 忽略某一处更改
  3. 使用 s 将某一处分割成更小的几份
  4. 使用 e 手动编辑某一处更改
  5. 使用 q 退出编辑

git log

用于查看修改记录。

查看当前分支的提交 log

git log

查看某个人的提交

git log --author="author"

查看某个文件的提交历史

git log filePath

git tag

查看所有标签

git tag:列出所有本地标签。
git tag -l:列出所有本地标签及其描述信息。
git ls-remote --tags origin:查看远程仓库的所有标签。

创建标签

git tag <tagname>:在当前提交上创建一个轻量级标签。
git tag -a <tagname> -m "注释信息":创建一个附注标签,并添加注释信息。
git tag -a <tagname> <commit-id>:给指定的提交打标签。

查看标签信息

git show <tagname>:显示标签的详细信息,包括注释信息、创建者等。

推送标签到远程仓库

git push origin <tagname>:推送单个标签到远程仓库。
git push origin --tags:推送所有本地标签到远程仓库。

删除标签

git tag -d <tagname>:删除本地标签。
git push origin :<tagname>:删除远程标签。首先删除本地标签,然后推送一个空的标签到远程仓库。

常见问题

无法删除远程tag的问题

问题背景:远程仓库删除tag,本地重新push代码后,之前删除的tag又出现了。
问题原因:远程仓库删除tag,但本地未删除,重新push后远程仓库tag又恢复。
解决办法:

  1. 查看本地所有tag

    git tag
  2. 先删除本地所有tag

    git tag -l | xargs git tag -d
  3. 再从远程仓库拉取最新tag

    git fetch origin --prune

自动更新代码

通过git checkout 命令可以实现,git push的时候,自动更新代码。

在git安装目录的 hooks 文件夹下新建立 post-reive 文件,写入下面内容即可:

#!/bin/sh
git --work-tree=/data/www/ --git-dir=/data/gitroot/jizhang.git checkout -f

提交时自动附上分支名

只需要将下面脚本适当的修改,保存名称为:commit-msg,然后放到 .git\hooks目录下即可

#!/bin/sh

COMMIT_MSG_FILE=$1

COMMIT_MSG=$(cat $COMMIT_MSG_FILE)

# 获取分支名称
BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD)
# 分支名称的规则,例如:yyht-12323-修改文案,这里可以根据需要修改
TASK_ID_PATTERN="(yyht|ST)-[0-9]+"
TASK_ID=$(echo $BRANCH_NAME | grep -Eo "[^/]+/$TASK_ID_PATTERN" | grep -Eo "$TASK_ID_PATTERN")

# 若分支名不包含 task-id, 则不作修改
if [[ -z "$TASK_ID" ]]
then
  exit 0
fi

# 若提交信息已包含 task-id, 则不作修改
if [[ "$COMMIT_MSG" == *"$TASK_ID"* ]]
then
 exit 0
fi

echo -e "\n\nTB: $TASK_ID" >> $COMMIT_MSG_FILE

查看来源分支

有时候需要确定,当前分支是否是从master切出来的,可以使用 git reflog命令

git reflog

然后查看输出结果的第一行

image.png

有时候想要知道某个提交id属于哪个分支的。执行以下命令,哈希值替换成自己的提交hash值

git branch --contains 28598cd72c5df9501xxxx589c84c8

得到结果如下:

* develop
  feature/已发货配件订单取消新增逻辑_3800146
(END)

由此可见,第一个分支就是第一次创建提交的分支,然后把分支合并到了develop,所有develop上也有这个提交。

.gitignore 设置教程

有时候我们希望git忽略文件夹下某个类型的文件,其它的文件都不忽略,那如何办到呢?

例如要忽略工程中upload目录下的所有非 .jpg 文件(只提交该目录下所有 .jpg 文件),在 .gitignore 中就可以这样写:

upload/*  
!upload/*.jpg

ssh免密操作

当我们使用的是ssh和远程仓库交互的时候,经常需要输入密码,那如何才能不需输入密码呢?

  1. 生成公钥和私钥,这个比较简单,自己百度即可。然后会有id_rsa.pub公钥,id_rsa私钥两个文件。
  2. 将公钥放到远程代码仓库
  3. 将私钥放在 ~/.ssh/id_rsa
  4. 然后修改权限:chmod 0600 ~/.ssh/id_rsa ,不然会提示:权限 too open
最后修改:2025 年 12 月 20 日
如果觉得我的文章对你有用,请随意赞赏