git常用操作及配置

Centos7更新git版本

背景描述
CentOS7上的Git版本太陈旧,在使用过程中会遇到问题,因此需要升级git版本

# 查看git版本
# git --version
git version 1.8.3.1
# 系统版本:(CentOS 7.6)
# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core)

Linux配置git命令自动补全

# 下载git-completion.sh
wget -O /etc/profile.d/git-completion.sh https://raw.github.com/git/git/master/contrib/completion/git-completion.bash

在这里插入图片描述


Centos7使用SCL源安装git2–推荐

https://blog.youkuaiyun.com/omaidb/article/details/126462159


Centos7使用yum安装git236版本-IUS源

参考: https://blog.youkuaiyun.com/omaidb/article/details/126462236


github加速

https://github.com前面加上https://ghproxy.com/,如下图:

在这里插入图片描述

# 使用hosts
wget -c https://gitee.com/fliu2476/github-hosts/raw/main/hosts

# 合并github的hosts到/etc/hosts
echo hosts >> /etc/hosts

Windows安装git命令行版

# 安装git客户端
choco install git -y

使用cmder中的git纯命令行

# 安装cmder终端
choco install cmder -y

cmder终端的Windowsgit命令行路径:
C:\tools\Cmder\vendor\git-for-windows\cmd\git.exe
在这里插入图片描述
pwsh7$Profile中配置gitAlias

# 配置git的Alias
Set-Alias git "C:\tools\Cmder\vendor\git-for-windows\cmd\git.exe"

在这里插入图片描述

# 测试是否能正常执行git命令
git ---version

在这里插入图片描述


git常用配置

参考: https://segmentfault.com/a/1190000039320926

参考: 最全的Git常用命令速查-2021版

快速push参考:
https://zhuanlan.zhihu.com/p/133871333

https://www.jianshu.com/p/d32d322766eb

配置文件在~/.gitconfig

# Git LFS 的过滤器配置
## Git LFS (Git Large File Storage) 是Git中用于管理大型二进制文件的扩展
[filter "lfs"]
	# "clean" 过滤器命令,用于在提交文件之前对文件进行清理操作
	## %f 是一个占位符,表示被过滤的文件路径。
	## git-lfs clean 是Git LFS提供的清理命令,用于将文件添加到Git仓库之前,将大型文件替换为指向Git LFS(远程存储)的指针。
	clean = git-lfs clean -- %f
	# "smudge" 过滤器命令,用于在检出文件时对文件进行还原操作
	## %f 是一个占位符,表示被过滤的文件路径。
	## git-lfs smudge 是Git LFS提供的还原命令,从Git仓库中检出文件时,将指向Git LFS(远程存储)的指针转换为实际的大型二进制文件
	smudge = git-lfs smudge -- %f
	# "process" 过滤器命令,用于在文件读写过程中进行处理操作。
	## git-lfs filter-process 是Git LFS提供的处理命令,用于自动执行 "clean" 和 "smudge" 操作
	## 每当Git需要处理大型二进制文件时Git LFS就会运行下面的命令
	process = git-lfs filter-process
	# 必须使用Git LFS来管理大型二进制文件
	required = true

[user]
	name = 自然自在
	email = xxx@gmail.com

# GitHub访问太慢,给它加个proxy加速一下
## 单独配置github.com
# [http "https://github.com"]
# 	proxy = socks5h://127.0.0.1:51837
# 给所有http链接加代理
[http]
	proxy = socks5h://127.0.0.1:1080
# 给所有https链接加代理
[https]
	proxy = socks5h://127.0.0.1:51837
	# 带认证的proxy格式
	# https://qiaofei:qiaofei123@proxy.ibm.com:443

# 配置快速push
[alias]
	fp = "!git add .;git commit -m 快速push;git push"
[push]
	# 在Git2.0以后,push.default由 'matching'修改为 'simple'
	# simple 只推送当前分支
	# matching 推送所有有对应的远程分支的本地分支
	default = simple

# 配置git上传文件大小
# ttps://blog.youkuaiyun.com/yilulvxing/article/details/87859483
[http]
    # 单位Bytes = 500M
    postbuffer=524288000

# 安全目录
[safe]
	directory = D:/code/qiaofei_notes

# 给Git 输出添加颜色
[color]
	ui = true

[core]
    # 压缩级别 -1 到9
    ## -1是默认参数,9最慢
	compression = 9

git上传超过100MB文件

git上传大文件
github仓库容量限制在1G,单个文件不能超过100M,有50M的文件,就会警告
参考:https://blog.youkuaiyun.com/yilulvxing/article/details/87859483
上传项目到GitHub上,当某个文件大小超过100M时,就会上传失败,因为默认的限制了上传文件大小不能超过100M。如果需要上传超过100M的文件,就需要我们自己去修改配置。
首先,打开终端,进入项目所在的文件夹;

# git全局配置上传缓冲区大小到500M
git config --global http.postBuffer 524288000

# 针对当前仓库配置上传缓冲区大小到500M
git config http.postBuffer 524288000

查看git配置

# 查看git配置
git config -l

可以看到配置项的最下面多出了一行我们刚刚配置的内容. (52428000 Bytes =500×1024×1024,即500M)。
在这里插入图片描述


socks5访问不了github

如果用socks5也访问不了 github ,可以在 .gitconfig 中把 socks5:// 换成 socks5h:// ,这样会使用远端解析 DNS 保证域名不被污染;也可以换用 http proxy.
(其中 socks5h 表示远程解析 dns,如果直接写 socks5 是本地解析 dns )

在这里插入图片描述


clone的时候有时候会有很大的.git目录

只是为了clone尽量小的话,用git clone --depth=1只获取最新的commit即可

# 只获取最近一次的提交
git clone --depth=1 <远程仓库URL> 

Linux下为git配置token免密登录

参考: https://beginor.github.io/2014/03/04/git-client-save-user-pass.html

(多平台通用)在用户的home目录下创建一下_netrc文件或者.netrc文件:

  • Linux or macOS下创建 ~/.netrc;
  • Widnows建议创建 ~/_netrc
# 在用户的home目录下创建一下`.netrc`文件
touch  ~/.netrc

.netrc文件内容如下:

# 配置github推送代码免密
machine github.com
login not-used
password {token}

machine api.github.com
login not-used
password {token}

git常用操作

git中有区域

  • 工作区–文件实际的位置
  • 暂存区将要提交的文件列表
  • 版本库–存储项目的历史记录元数据
    • 版本库包括了已经提交文件快照、指向每个快照的指针
    • 每次提交都会创建一个新的版本,并将其添加到版本库中。版本库中的每个版本都包含一个指向其父版本的指针,这样就可以跟踪提交历史

在使用Git进行版本控制时,我们首先对文件进行修改,然后将修改的文件添加到暂存区,最后再将暂存区中的文件提交到版本库中。
通过这种方式,我们可以很好地控制代码的版本变化过程,同时也可以比较容易地回滚到之前的某个版本


配置git用户信息

# 设置全局用户签名
## git config --global user.name 用户名
git config --global user.name "Your Name"

# 配置全局Email
## git config --global user.email 邮箱
git config --global user.email "you@example.com"

在这里插入图片描述

# 查看该git用户信息
cat ~/.gitconfig

在这里插入图片描述


删除git配置项

# 针对当前仓库配置上传缓冲区大小到500M
git config http.postBuffer 524288000

# 删除core.hooksPath的当前配置项
git config --unset core.hooksPath

# git全局配置上传缓冲区大小到500M
git config --global http.postBuffer 524288000

# 删除core.hooksPath的全局配置项
git config --global --unset core.hooksPath

# 查看该git用户信息
cat ~/.gitconfig

本地创建项目版本库

# 在本地创建项目 目录
mkdir -p git_projecat_dir_name

# 进入本地项目 目录
cd  git_projecat_dir_name

# 将当前目录转换为Git版本库。
## 初始化本地仓库
git init

在这里插入图片描述
git代码版本库就是目录下的.git目录

# 查看.git目录详情
ls .git/

在这里插入图片描述


添加文件到暂存区

# 创建代码文件1
echo "test" > test.py

# 将文件添加到暂存区,准备提交到仓库。
# git add <file>
git add test.py

# 查看当前工作区和暂存区的状态。
git status

在这里插入图片描述


撤销修改

https://blog.youkuaiyun.com/kikajack/article/details/79846098

撤销文件在工作区的修改–未执行git add

# 撤销指定文件在工作区的修改
git checkout -- test.py

在这里插入图片描述

撤销指定文件在暂存区的修改–未执行git add

# 将文件从暂存区中移除,但保留工作区的更改
git restore --staged <file>

# 撤销指定文件在工作区的修改
git checkout -- 文件名

撤销之前的所有git add 操作,即在暂存区所有修改

# 撤销暂存区的所有修改
git restore

在这里插入图片描述


提交代码更改到版本库

# 添加到暂存区并提交到版本库
## -a add 添加到暂存区
git commit -a -m "<message>"

# 查看当前工作区和暂存区的状态。
git status

在这里插入图片描述


# 将暂存区的内容提交到版本库,并添加提交信息。
## -m 提交的消息
git commit -m "<message>"

在这里插入图片描述

# 查看当前分支的commit提交记录。
git log

在这里插入图片描述


回退撤销commit

# 把HEAD指针(即当前分支的指针)回退到前两个提交,但是保留工作区的更改。

# 软重置
git reset --soft HEAD~2 

# 硬重置(Hard Reset):
# 彻底删除这两次提交,并且不保留这些更改
git reset --hard HEAD~2

分支管理

# 克隆远程仓库到本地。
git clone <repository-url>

# 将指定分支合并到当前分支。
git merge <branch-name>

# 将本地仓库的代码推送到远程仓库。
git push

# 从远程仓库拉取最新的代码到本地仓库。
git pull
## 将远程仓库对应分支最新内容拉下来后与当前本地分支直接合并
git pull 远程库地址别名 远程分支名

查看本地分支

# 查看本地分支
# 列出当前所有分支。
git branch

# 打印结果 * main

创建新的分支

# 创建一个新分支。
git branch <branch-name>

切换到指定分支

# 切换到指定分支。
git checkout <branch-name>

将指定分支合并到当前分支。

# 将指定分支合并到当前分支。
git merge <branch-name>

push代码

在提交之前执行 git diff 显示差异,以避免签入意外的代码。

# 将代码添加到暂存区
git add .

# commit代码
git commit -m "本次提交备注"

# 推送代码到远程仓库的master
git push -u origin master

# 完成后
# 推送至远程分支
## git push origin 分支名
git push origin master 
## 或
git push

撤销add和commit

参考: Git—撤销add、commit、push操作

git pull时提示:
error: cannot pull with rebase: You have unstaged changes. error: please commit or stash them.
翻译: 错误:无法使用 rebase 拉取:您有未暂存的更改。 错误:请提交或隐藏它们。

# 撤销commit和add操作,删除工作空间改动代码
## ^表示父提交
## HEAD^2 表示当前提交的第二个父提交
git reset --hard HEAD^  

git添加项目地址

https://docs.github.com/cn/get-started/getting-started-with-git/managing-remote-repositories

#  git添加项目地址
git remote add origin https://github.com/user/repo.git

# 起别名
git remote add 别名 远程地址

# 查看项目远程仓库
git remote -v

git修改项目地址

参考: https://www.jianshu.com/p/ebc6b1a026c2

# 进入项目目录
cd 项目路径

# 查看所有远程仓库
git remote

# 查看当前所有远程地址别名
git remote -v

# 查看指定远程仓库地址
git remote xxx 

# 修改项目地址
git remote set-url origin http://192.168.100.235:9797/john/git_test.git

查看分支提交历史

# 查看分支提交历史
git log

# 查看本地库状态
git status

# 查看历史版本
git reflog

# 版本穿梭
git reset --hard 版本号

分支管理

参考: https://backlog.com/git-tutorial/cn/stepup/stepup2_3.html


如何在fork上创建基于主repomaster创建开发分支

# 创建一个名为“branch-name”的新分支,并将当前工作目录切换到该分支。
git checkout -b branch-name

# 从“upstream”远程代码库中获取最新的代码,但并不将其合并到当前本地分支。
## 它通常用于在本地创建一个与远程仓库同步的备份分支,以便轻松地比较和合并更改。
git fetch upstream

# 将当前分支重置为与“upstream/master”分支相同的状态。
## 这将会丢弃当前分支上所有未提交的更改,并将当前分支指向“upstream/master”分支所指向的提交。请注意,这是一种危险的操作,因为它将覆盖本地分支上的任何更改,应谨慎使用。
git reset --hard upstream/master

# 将本地分支 branch-name 推送到远程仓库 origin,并创建一个名为 branch-name 的远程分支作为其跟踪分支,以便在以后的推送和拉取操作中使用。如果这个远程分支不存在,则会自动创建它。

## 通过 --set-upstream 参数指定本地分支与远程分支之间的跟踪关系,使得在执行类似 git pull 和 git push 这样的命令时,Git 能够正确地识别要拉取或推送的分支。
## 需要注意的是,在第一次 push 时使用该命令非常有用,但在之后的推送和拉取操作中,您可以简单地使用 git push 和 git pull 来更新远程分支。
git push --set-upstream origin branch-name

查看远程有哪些分支

# 查看分支
git branch -v

# 查看当前分支
git branch

# 查看所有分支
git branch -a

# 以“main”分支为基础,将当前所在分支(即“branch-name”分支)的提交移动到“main”分支之后,并使它们成为“main”分支的直接子提交。
git rebase main

创建分支

# 创建 gh-pages 分支
# master 分支用作保存源码使用,而 gh-page 则是部署静态代码使用
# 提交后 Github 会默认 gh-pages 为静态网站分支,无须再开启,默认链接是 https://username.github.io/blog
## git branch 分支名
git branch gh-pages

# 将本地分支 gh-pages 推送到远程仓库 origin 的同名分支,并通过 -u 参数设置该分支为跟踪分支。
git push -u origin gh-pages

合并分支

# 将指定分支合并到当前分支
git merge <branch-name>

切换分支

# 切换分支
git checkout 分支名

# 切换到master分支
git checkout master

新建本地分支和远程分支关联

# 切换到v22.05分支
git checkout -t remotes/origin/v22.05

# 切换回master分支
git checkout master

回滚代码

回滚场景:已 commit,但还没push
在这里插入图片描述

# 回退到上个版本
git reset --hard HEAD

## ^ 符号通常用于访问某个提交的父提交
## HEAD^2 表示当前提交的第二个父提交
git reset --hard HEAD^

# 回滚到指定的commit_id
##  git reset --hard <要回滚到的 commit>
git reset --hard commit_id

恢复修改

回滚场景:已 push 到远端时,此时不能用 git reset,需要用 git revert

# 恢复到97ea0f9的修改
git revert -n 97ea0f9

# 默认拉取vim填写日志,保持默认日志即可
git revert --continue
## 或
git commit -m "恢复第三次修改"

# 记得处理完推送到远端
git push

# 推送本地分支上的内容到远程仓库
git push 别名 分支

git移除已经add的文件

原文链接:https://blog.youkuaiyun.com/Torey_Li/article/details/87442355
如果git要删除文件,最好用 git rm file_name,而不应该直接在工作区直接 rm file_name

git rm 命令

使用 git rm 命令即可,有两种选择,

# 不删除物理文件,仅将该文件从缓存中删除
git rm --cached “文件路径”

# 将该文件从缓存中删除,还会将物理文件删除(不会回收到垃圾桶)
git rm --f “文件路径”

请问 git rm --cache 和 git reset HEAD 的区别到底在哪里呢?

如果要删除文件,最好用 git rm file_name,而不应该直接在工作区直接 rm file_name
如果一个文件已经add到暂存区,还没有 commit,此时如果不想要这个文件了;
有两种方法:

1,用版本库内容清空暂存区,但要慎重使用

git reset HEAD 

2,只把特定文件从暂存区删除,

git rm --cached xxx

删除分支

# 删除本地分支
git branch -d localBranchName

# 删除远程分支
git push origin --delete remoteBranchName

commit后修改代码

git 小技巧,一次 commit以后,突然发现还有点问题,又修改了几行代码,不想生成一个新的 commit 怎么办?
在这里插入图片描述

# 先修改代码

# 添加修改:
git add .

# 使用原来的 commit:
git commit --amend --no-edit

diff对比文件差异

# 比较两个文件并将差异输出到另一个文件
## -w 参数忽略空格和制表符的差异。
## -b 参数忽略空白行的差异。
## -a 参数将所有文件视为文本文件进行比较。
## -y 参数以并排的方式显示比较结果。
diff -wbay file_A fiale_B > file.diff 

comm只显示差别内容

# 表示file1与file2比较,显示只存在file1文件中的行
## -23 只输出file1文件中独有的行
comm -23 <(sort file1.txt) <(sort file2.txt)

# 将只存在file1文件中的行,添加到file2中
comm -23 <(sort file1.txt) <(sort file2.txt)| pv >> file2.txt

在这里插入图片描述

git技巧

简单省力的 workflow:

如果误操作 check-in 到了 master/main branch 怎么办?

直接 create-checkout branch,然后把 local master/main 删掉。
免去了 local reset,也省得 local/remote out of sync

首先,创建并检出一个新的分支,这样你刚刚提交的更改就会在这个新的分支上:

 git checkout -b new-branch

然后,你可以删除本地的 master 或 main 分支:

git branch -d master

或者

git branch -d main

这样做可以避免使用 git reset 命令并防止本地和远程的 master/main 分支不同步。
记住,永远不要直接在 master/main 分支上进行开发,这是一个很好的实践,可以帮助你保持代码库的整洁和管理性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值