Centos安装高版本git
由于 centos7 默认安装的是最高版本的 git 是 1.8 版本,很多场景都要求 git的版本要高一些,所以需要安装升级,主要有两个办法:
- 可以使用编译安装,不过太麻烦。
- 是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 命令修改
- .git/config 文件,作用于当前目录,优先级第一
- ~/.gitconfig 文件,作用于特定用户,优先级第二
- 安装目录/etc/gitconfig 文件,作用于当前 git 安装,优先级最后
配置文件的语法格式:
- 注释使用分号
- 配置项 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信息遵循的七个规则:
- 用一个空行分开主题与正文
- 限制主题行到50个字符,因为主题经常作为邮件的标题
- 主题行用大写字母开头
- 主题行末尾不要用句号
- 主题行要用祈使语气
- 正文要在72个字符处时换行
- 用正文解释what 和 why 而不是how
git add
缓存单个文件
git add 文件路径名称
缓存所有文件
git add -A
git add *
缓存目录下的所有文件和目录
git add 目录名称
交互式缓存,有时候不想缓存文件的所有修改,只想缓存其中的某一个地方的修改,选择其中想要缓存的修改
git add -p 文件或者目录
进入交互之后,有以下这些选项:
- 使用
y缓存某一处更改 - 使用
n忽略某一处更改 - 使用
s将某一处分割成更小的几份 - 使用
e手动编辑某一处更改 - 使用
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又恢复。
解决办法:
-
查看本地所有tag
git tag -
先删除本地所有tag
git tag -l | xargs git tag -d -
再从远程仓库拉取最新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
然后查看输出结果的第一行

有时候想要知道某个提交id属于哪个分支的。执行以下命令,哈希值替换成自己的提交hash值
git branch --contains 28598cd72c5df9501xxxx589c84c8
得到结果如下:
* develop
feature/已发货配件订单取消新增逻辑_3800146
(END)
由此可见,第一个分支就是第一次创建提交的分支,然后把分支合并到了develop,所有develop上也有这个提交。
.gitignore 设置教程
有时候我们希望git忽略文件夹下某个类型的文件,其它的文件都不忽略,那如何办到呢?
例如要忽略工程中upload目录下的所有非 .jpg 文件(只提交该目录下所有 .jpg 文件),在 .gitignore 中就可以这样写:
upload/*
!upload/*.jpg
ssh免密操作
当我们使用的是ssh和远程仓库交互的时候,经常需要输入密码,那如何才能不需输入密码呢?
- 生成公钥和私钥,这个比较简单,自己百度即可。然后会有id_rsa.pub公钥,id_rsa私钥两个文件。
- 将公钥放到远程代码仓库
- 将私钥放在
~/.ssh/id_rsa - 然后修改权限:
chmod 0600 ~/.ssh/id_rsa,不然会提示:权限 too open