# git
git    config    --global  credential.helper store
        /\         /\      user.name  "  "
	    ||		   ||	   user.email "  "
配置git环境  配置整个环境  


工作树  --  暂存区  --  本地仓库  --  远端仓库



git status						#查看当前仓库状态

git init						#创建仓库
		--bare <code.git>				#没有工作树的选项(多用于git服务器)

git add 文件 					#将文件放到暂存区
		-n								演习
		*								所有 新建的，删除的，修改的
		.								新建的，修改的
		-u								更新已追踪
		-f								允许添加忽略的文件
		-A, --all						添加所有已跟踪和未跟踪


git commit						#将暂存区修改合成一个提交
		-m "填写概要"					
			# 不写概要则会创建一个文件，第一行概要，第二行空，第三行详细
		-am								#相当于add + commit

git log							#仓库日志
		-a								#查看所有分支的提交记录
		--stat							#详细	
		--pretty=[short/oneline]		#特殊显示
		--graph							#更直观选项
		--after="YYYY-MM-DD"			#指定日期
		--before="YYYY-MM-DD"			#指定日期
		--author="xxx"					#特点作者提交
		origin/master					#看远端仓库的日志
		文件/目录						#单独追踪

git diff 						#比对差异 与暂存区差异
		HEAD							#与本地仓库最新提交差异

git reflog						#查询历史操作

git branch						#显示本地分支
		xxx								#创建名为 xxx 的分支
		-a								#查看全部分支
		-r								#列出远端分支
		-d/D							#删除分支 大写强制
		-m/M							#修改主分支 大写强制
		-u <remote>/<branch>			#设置追踪关系
		-vv								#查看每个分支的最后提交信息和跟踪关系,常用于检查是否全部分支已同步
		--merged						#列出所有已合并到当前分支的分支
		--no-merged						#未合并

git checkout					#切换分支
		xxx								#切换到 xxx 分支
		-b xxx							#创建并切换到 xxx 分支
		[file]							#未提交的文件撤销修改
		[hash]							#回退

git switch						#切换分支
		-c xxx							#创建并切换到 xxx 分支

git merge						#合并分支
		xxx								#将 xxx 分支合并到当前工作分支
		--no-ff							#在历史记录中记录合并 (尽量加这个)
		--squash						#将分支合并为一个提交进行合并，简化历史
		--abort							#假如合并过程中出现冲突，可使用这个命令终止合并
		-m <message>					#提交信息
		--edit							#创建合并提交前，允许编辑提交信息
			#
			# 若产生冲突，解决冲突后，需进行以下操作
			# git add
			# git commit

git reset 						#回溯
		--hard HEAD~1					#撤销最后一次commit 本地仓库 and 暂存区 and 工作树
		HEAD~1							#撤销最后一次commit 仅本地仓库 and 暂存区
		--soft HEAD~1					#撤销最后一次commit 仅本地仓库

git revert						#提交一个反commit用于撤销前面的commit
		HEAD
		[hash]

git rebase						#变基 将一系列提交从一个分支上移植到另一个分支上
		<basebranch>					#将当前分支更改应用到<basebranch>分支上
		-i 								#压缩历史 交互式变基
		# -i HEAD~N						#回退N次提交
		--onto <newbase> <branch>		#将<branch>分支变基到<newbase>上
		--abort							#当冲突时撤销合并
		--continue						#继续合并

git switch						#
		-c xxx							#创建并切换到 xxx 分支

git stash 						#保存工作区当前状态
		list							#查看存储状态
		pop								#将最新一次记录恢复并删除
		apply							#默认恢复最新记录
		clear							#清除所有记录
		show							#看当前与栈顶差异
		save xxx						#提交注释


-----------------------------------------------------------------------------

git clone URL					#clone一个仓库

git remote 						#操作远程仓库
		add	origin URL					#添加远程仓库
		rm origin URL					#删除远程仓库
		-v 								#显示详细信息

git push						#推送到远程
		origin xxx:xxx					#将 xxx 分支推送到远端 origin 仓库  本地分支:远端分支
		-u origin xxx					#推送同时，尝试将origin 的 xxx 设置为上游
		origin xxx --delete				#删除远端的xxx分支
		--tags							#推送全部标签
		-f								#强制提交
		origin :xxx						#删除远端 xxx 分支

git pull						#拉取远端仓库 全部 = git fetch + git merge
		origin xxx						#直接覆盖当前工作树
		--rebase						#将本地分支的提交应用到拉取的提交之上，保持历史线性
		--no-commit						#拉取并合并代码，但不自动提交结果
		--edit							#创建合并提交前，允许编辑提交信息

git fetch						#拉取到本地仓库中 不对工作树进行覆盖
		--all						#获取所有远端仓库更新
		--prune						#拉取更新时，清理已删除的分支

git tag							#查看所有标签
		-d								#删除标签
		[tag]							#
		-a 								#设置标签名
		-m								#填写标签说明


-----------------------------------------------------------------------------

.gitignore						#此文件中可放置不想追踪的文件



#1:
	修改了ssh端口的推送与clone
	git remote add iaalai ssh://root@api.iaalai.cn:25522/root/git/code.git/
	git clone ssh://root@api.iaalai.cn:25522/root/git/code.git/

#2:
	搭建git服务器
	1 + install git/openssh
	2 + useradd git
	3 + 创建证书登陆
		用户: .ssh/id.rsa.pub -> 服务器:.ssh/authorized_keys 一行一个
	4 + 创建仓库并移交权限给git用户
	5 + 禁用登陆shll usermod -s /bin/git-shell git

#3:
	工作流参考
	1 + git clone 到本地仓库 
	2 + git checkout -b feature 创建新分支
	3 + git commit -am	提交
	4 + git push origin feature
	当遇到主分支更新时
	1 + git checkout main					切换到主分支
	2 + git pull origin main				拉取最新更新
	3 + git checkout feature				切换到特性分支
	4 + git rebase main						尝试变基合并
	5 + git push -f origin feature			强制提交特性分支
	6 + Pull Request   Squash and merge		合并到主分支
	7 + git checkout main					切换回主分支
	8 + git branch -D feature				删除特性分支
	9 + git pull origin main				拉取最新主分支

#4:
	开发时查看远端仓库是否更新
	pull or fetch
