git最佳实践

git config

Copy
git config --global user.name "xj"
git config --global user.email "xj.@outlook.com"
git config --global credential.helper store

查看：
git config --global --list
git config --global user.name
git config --global user.email

参数：(Local)
--global 全局配置，对所有仓库生效
--system 系统配置，对所有用户生效

创建 local Repository

Copy
mkdir learn-git
cd learn-git
git init

git clone https://github.com/ekmett/ad.git

local Repo 关联 remote Repo

Copy
echo "remote-repo" >> [README.md](http://readme.md/)
git init
git add [README.md](http://readme.md/)
git commit -m "first commit"
____若已存在仓库则执行以下，否则上下都执行
git branch -M main #将当前分支重命名为 main
git remote add origin [git@github.com](mailto:git@github.com):xj/repo.git #关联远程仓库git@github.com:xj/repo.git；并声名为origin
git push -u origin main:main #将本地 "main" 分支推送到远程仓库origin 的main分支

git remote -v #查看当前关联的仓库
git remote set-url origin <new_path> #重置仓库地址
git remote remove origin #删仓库

gitflow

main 分支：只接受 hotfix/release 的合并，不允许直接 push 修改；每次合并生成 x.x.x 版本号（主版本，次版本，修订版本）
hotfix: 从 main 分离，修复完合并回 main
dev: 从 main/hotfix 分离，开发完成合并到 release
release: 从 dev 分离，测试完成合并到 main
feature-xx: 从 dev 分离，开发完合并到 dev

每次修改完 bug 把修改记录添加到暂存区，最后再一次性提交到本地仓库，记录为一次版本信息
可以理解为 3 个目录（实际上不是）：本地仓库是发布目录

Copy
git status 查看文件状态
git log查看提交版本记录
git log —oneline

git diff 查看暂存区和工作区差异
git diff HEAD 查看工作区和当前版本差异
git diff -- cache 查看暂存区和当前版本差异
git diff 59cf93 59cf712 比较两个版本差异
或git diff HEAD~1 HEAD file3.txt比较两个版本file3的差异

git ls-files查看暂存区

提交

Copy
**git add** fileName
git add . //跟踪当前目录下所有未跟踪文件

**git commit filename -m "此为更新说明"
git commit** -am "说明" 暂存+提交

git push ssh关联后使用这个命令即可；
git push remote_repo xvjin_dev

git checkout -- 撤回到最近一次提交状态

删除

Copy
git rm file.txt 用ls和git ls-files 可以发现在工作区和暂存区中同时删除了
git commit -m "删除"

git clean -f 强制清空未跟踪文件

git rm -r dir递归删除某目录下所有东西
git rm --cached file.txt从缓存区删除

更新

Copy
**git pull** origin main 拉取并合并origin 仓库的main分支
git fetch origin main 拉取

git pull mylibrary main --allow-unrelated-histories 第一次拉取远程分支到本地可能需要

分支管理

Copy
git branch xvjin-dev 创建分支
git switch xvjin-dev 切换分支
git checkout xvjin-dev 切换分支（旧）

git merge xvjin-dev 把xvjin-dev 合并到当前所处分支,且当前分支多出一条提交记录；合并后xvjin-dev 还是存在的，删除需手动
(dev)>>git rebase main 将当前dev分支嫁接（变基）到目标分支main上；这种合并形成线性历史，比较干净

git branch -d xvjin-dev 合并后删除分支
git branch -D xvjin-dev 强制删除未合并分支

git branch -a 查看所有分支
git remote show origin 查看origin仓库更新记录
git log 查看本地仓库更新记录

合并冲突

Copy
1）git diff 查看差异
2）手动修改合并失败的文件
3）提交修改的文件就自动完成了冲突文件的合并

git merge --abort 中止合并

倒回某个版本

Copy
git reset --soft HEAD^ 回退到仓库某log版本，保存工作区，暂存区内容
git reset --hard HEAD~1 回退到仓库某log版本，不保存工作区，暂存区内容
git reset --mixed 59cf9334cf957 回退到仓库某log版本，保存工作区，不保存暂存区内容

git log --oneline --grahp --decorate --all 图形化查看版本号哈希，用于上述回退

git reflog查看历史操作

git checkout -- filename 丢弃工作区的修改,用缓存区数据覆盖当前工作区

ssh 配置

OpenSSH 核心操作 | GitHub SSH 连接_哔哩哔哩_bilibili

基于 ssh 协议从远程拉取创建本地仓库；或 push 到远程仓库时：配置 ssh 密钥

1）指定在./.ssh/ 生成 rsa（或 ed25519）类型的 4096 位密钥 id.rsa ，按回车提示命名密钥文件；默认密钥文件 id_rsa; 同时还会生成公钥文件 id_rsa.pub

Copy
ssh-keygen -t rsa -b 4096 -f ./.ssh/id.rsa
ssh-keygen -t ed25519 -C "<标签：一般写 github email>"

2）然后：从.ssh 目录下查找并复制公钥到远程仓库设置；最后：配置.ssh/config 文件（win 在 C:\Users.ssh）(Linux 在)
vi ./config:

Copy
IdentityFile ~/.ssh/私钥文件 #当被请求ssh时自动到私钥路径读取私钥配对

#github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id.rsa

意思是连接主机 github.com 时首选验证方式为公钥验证，本地私钥路径为～/.ssh/id.rsa
3）测试

Copy
ssh -T git@主机（上面host） //测试

Git LFS

Copy
git lfs version #查看

安装完成后，在您的 Git 仓库中初始化 Git LFS：

git lfs install

使用 Git LFS 跟踪大文件。假设您希望跟踪所有 PDF 文件，可以使用以下命令：

git lfs track "*.pdf"

添加和提交更改
接下来，您需要将更改添加到您的 Git 仓库并提交：

git add .gitattributes
git add <large_files> # 您想要跟踪的那些大文件
git commit -m "Track large PDF files with Git LFS"

.gitignore

提交到版本库时忽略某些文件：注意涉及身份、密码、口令、秘钥等敏感信息文件一定别提交了

Copy
echo *.o > .gitignore

License