随笔 - 2649  文章 - 2452  评论 - 0  阅读 - 80424

git

1 Git

初始化

// 初始化设置用户名和邮箱
git configh --global user.name "username"
git configh --global user.email user@email.com
git configh --global credential.helper store   

创建仓库

// 创建一个新的本地仓库
git init <project-name>
    
// 下载一个远程仓库
git clone <url>    
    
// SSH配置
ssh-keygen -t rsa -b 4096
    
// id_rsa,私钥文件id_rsa.pub公钥文件,上传到github
复制id_rsa.pub的内容,github右上角个人头像→settings→SSH and GPG keys→New SSH key→key编辑框→Add SSH key   

// 推送更新内容    
git push <remote><branch>
    
// 拉取更新内容    
git pull <remote>    
git pull <远程仓库名><远程分支名>:<本地分支名>    
// 添加远程仓库
git remote add <远程仓库名><远程仓库地址>
git push -u <远程仓库名><分支名>

// 查看远程仓库
git remote -V

// 拉取远程仓库内容
git pull <远程仓库名>

四个区域

工作区
暂存区
本地仓库
远程仓库

三种状态

已修改(modified),修改了文件,但没保存到暂存区
已暂存(staged),把修改后的文件放到暂存区
已提交(commited),把暂存区的文件提交到本地仓库

两个平台

// gitee,码云,国内平台

// gitlab,极狐,私有化部署
可以在自己的服务器部署一个gitlab代码托管服务

GUI

// sourcetree,gitkraken,gitlens

基本概念

main,默认主分支
origin,默认远程仓库
HEAD,指向当前分支的指针
HEAD~,上一个版本
HEAD~4,上四个版本

特殊文件

.git,git仓库的元数据和对象数据库
    
.gitignore,忽略文件,不需要提交到仓库的文件
匹配规则:从上到下逐行匹配,每一行表示一个忽略模式
git-scm.com/docs/gitignore   
1.空行或者以#开头的行会被git忽略,一般空行用于可读性的分隔,#一般用作注释 
2.使用标准的Blob模式匹配,例如
    *通配任意字符
    ?匹配单个字符
    []表示匹配列表中的单个字符,比如[abc]表示a/b/c
3.**表示匹配任意的中间目录
4.中括号可以使用短中线连接,比如
    [0-9]表示任一数字,[a-z]表示任一小写字母
5.!表示取反
如doc/**/*.pdf,表示忽略doc目录及其所有子目录下的.pdf文件 
    
.gitattributes,指定文件的属性,比如换行符
    
.gitkeep,使空目录被提交到仓库

添加和提交

// 添加一个文件到仓库
git add <file>

// 添加所有文件到仓库
git add .

// 提交所有暂存区的文件到仓库
git commit -m "message"

// 提交所有已修改的文件到仓库
git commit -am "message"    

分支

// 查看所有本地分支,当前分支前会有一个*,-r查看远程分支,-a查看所有分支
git branch

// 创建一个新的分支
git branch <branch-name>

// 切换到指定分支,并更新跟之前
git checkout <branch-name>

// 创建一个新的分支,并切换到该分支
git checkout -b <branch-name>

// 2.23版本后,切换分支用switch    
git switch <分支名>
    
// 删除一个已经合并的分支
git branch -d <branch-name>

// 删除一个分支,不管是否合并
git branch -D <branch-name>

合并分支

// 合并分支a到分支b,-no-ff表示禁用Fast forward模式,合并后的历史有分支,能看出曾经做过合并,而-ff表示使用Fast forword模式,合并后的历史会变成一条直线

git merge --no-ff -m "message" <branch-name>
    
// 合并&squash所有提交到一个提交
git merge --squash <branch-name>  
    
rebase不会产生新的提交,而是把当前分支的每一个提交"复制"到目标分支上,然后再把当前分支指向目标分支,而merge会产生一个新的提交,这个提交有两个分支的所有修改。    

解决合并冲突

// 两个分支未修改同一个文件的同一处位置时,git自动合并

// 两个分支修改了同一个文件的同一处位置:产生冲突
	解决办法:
        1.手工修改冲突文件,合并冲突内容
        2.添加暂存区,git add file
        3.提交修改,git commit -m "message"
    中止合并:当不想继续执行合并操作时可以使用下面的命令来终止合并过程:
        git merge --abort
// push时远程仓库发生变化

// 将HEAD重置到当前分支的最新提交
git reset --hard
    
// 删除所有未跟踪的文件和目录
git clean -df

// 
git pull
    
// gnu nano 退出,
ctrl+x

// 撤销合并并清理工作目录后,安全地重新拉取最新的代码
git pull

Rebase

// rebase,变基,可以把本地未push得分叉提交历史整理成直线,看起来更直观。但是多人协作时,不要对已经推送到远程的分支执行rebase操作

// 
git log --oneline --graph --decorate --all

// alias 取别名
alias graph = "git log --oneline --graph --decorate --all"

// graph,等同于git log --oneline --graph --decorate --all
graph
    
git checkout <dev>
git rebase <main>    

撤销

// 移动一个文件到新的位置
git mv <file> <new-file>

// 从工作区和暂存区中删除一个文件,然后暂存删除操作
git rm <file>

// 只从暂存区中删除一个文件,工作区中的文件没有变化
git rm -cached <file>

// 恢复一个文件到之前的版本
git checkout <file> <commit-id>

// 创建一个新的提交,用来撤销指定的提交,后者的所有变化都将被前者抵消,并且应用到当前分支
git revert <commit-id>

// 重置当前分支的HEAD为之前的某个提交,并且删除所有之后的提交。--hard表示重置工作区和暂存区,--soft表示重置暂存区,--mixed表示重置工作区
git reset --mixed <commit-id>

// 撤销暂存区的文件,重新放回工作区(git add的反向操作)
git restore --staged <file>

查看

// 列出还未提交的新的或者修改的文件
git status 

// -s,short,简略模式    
git status -s
    
// 查看提交历史,--oneline可省略
git log --oneline

// 查看未暂存的文件更新了哪些部分
git diff

posted on   AtlasLapetos  阅读(6)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示