云起工作室 15711107967
git
2023-12-12 23:15:14
工作区、暂存区、本地仓库

工作区git add 到暂存区  gitcommit  本地仓库

1、配置用户名和邮箱
 git config --global user.name "xxx"
git config --global user.email  xxx@163.com

存储
git config --global credential.helper store
//查看配置
git config --global --list 


新建版本库
git init  //本地当前目录下创建仓库
git init wenjijia  // 再wenjianjia下创建仓库
git clone https://xxx  //从远端克隆一个仓库


git status 查看仓库状态
git log 查看提交记录
git log --oneline  只显示提交的id和提交提示信息
git ls-files  查看暂存区的内容


HEAD 指向最新版本的id
HEAD~  或HEAD^  指向上一个版本
HEAD~2  表示head 之前的第二个版本

git reset --soft    工作区和暂存区的内容还存在  重新提交 直接commit就行
git reset --hard    工作区和暂存区的内容都会被清空  需要重新创建文件,再git add ……
git reset --mixed 默认为mixed  重新提交需要  git add 再次添加
git reset --head HEAD^  回滚到上一个版本
git reflog 查看历史操作记录版本号
git reset -head 版本号  就可以回退到指定版本了

git diff     查看差异
git diff    默认比较的是工作区和暂存区的差异
git diff HEAD  比较工作区和版本库之间的差异
git diff --cached 比较暂存区和版本库的差异
git diff 版本1id  版本2id  查看两个版本之间的内容
git diff HEAD~ HEAD 比较上一版本与当前版本的区别
git diff HEAD~ HEAD filename  只查看两个版本中 filename 内容




工作区删除文件 file1.txt后需要
git add file1.txt
git commit -m "提交提示"

git rm filename  删除文件后  不用再执行git add  但需要 commit 一下
git rm --cached filename   只删除暂存区的filename

.gitignore  git忽略文件
filename   忽略filename文件
*.log     或略所有  .log 结尾的文件  如果已有 xxx.log  则 忽略对xxx.log无效
temp/  忽略temp 文件夹
!lib.log    不忽略  lib.log
/fileme   之忽略 当前目录下  fileme文件
xxx/  忽略任何目录下的xxx文件夹
doc/*.txt   忽略  doc/下的  .txt 文件 不忽略  doc/a/  下的txt 文件
doc/*/*.pdf  忽略 doc下及多级递增下的所有  pdf文件


2、远程仓库github 
在根目录下 cd .ssh
ssh-keygen -t rsa -b 4096  第一次执行直接回车就行 会生成密钥文件


第二次执行为了不覆盖之前的 需要指定生成的密钥文件名

ssh-keygen -t rsa -b 4096  test.pub    test.pub  是新密钥文件名  此时会生成两个文件  test  和test.pub,test是私钥文件,test.pub 是公钥文件

将test.pub 内容复制到github  

如果指定的密钥文件名需要再创建  config 文件内容是
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/test       #  test 是私钥名称


然后回到工作目录执行  把远程仓库克隆到本地
git clone  git@github.com:....  回车  输入 创建密钥时设置的密码

此时的 git  commit -m ''     并不会影响远程仓库

2.2、gitee 生成密钥
ssh-keygen -t rsa -C 邮箱
将公钥复制到gitee
测试是否配置成功
ssh -T git@gitee.com

git push    把本地仓推送给远程仓库


git remote add origin git@github.com.... 关联远程仓库
git remote -v  查看当前仓库对应的远程仓库的别名和地址
git branch -M main    指定分支的名称为main   ,默认分支就是main 所以可以忽略
git push -u origin main   把本地的main分支和远程的orgin 仓库的main 分支关联起来等同于git push -u origin main:main

git pull orgin main:main  【orgin main:main】可以省略    ,从远端拉取内容到本地仓库

gitlib 可以搭建私有托管平台
git remote add gitlab git@...   关联gitlib仓库
git push gitlib main  推送到gitlib  仓库


3、分支

git branch   查看当前仓库中 所有的分支
git branch  分支名   创建新分支
git checkout 分支名  切换到分支  有风向
git switch 分支名称   切换分支2.23 版本之后的命令
git merge dev  是将dev分支合并到当前分支中
git merge --abort   合并过程中可以终止合并


git log --graph --oneline  查看分支合并情况图


git branch -d dev  删除 已经被合并的 dev 分支,如果没有被合并,不能被删除
git branch -D dev  不管dev是否被合并都会被删除


git commit -a -m “”  一个命令完成添加暂存和提交两个动作

git checkout -b dev 提交的id  回复dev 分支


git log --online --graph --decorate --all  查看图形化提交记录 
此命令太长,缩短如下
alias graph="git log --oneline --graph --decorate --all"
graph  就可以查看图形化提交记录了


git switch dev 
git rebase main   将当前dev分支编辑到目标main 分支上

git 解决冲突一、
git --hard FETCH_HEAD
git pull

上面的解决方法非常非常的霸道,是可以解决这个错误,但是它会回到初始的节点,假如我有修改本地代码但是没有提交,那么使用reset初始,可能会丢失这些修改的代码。

git 解决冲突二、
git add .
git commit -m '提交本地代码并且获取最新代码'
//注释:获取源dev分支最新代码
git pull origin dev

合并两个库时:fatal: refusing to merge unrelated histories
git pull origin master --allow-unrelated-histories