Git学习

文档汇总

Git使用详细教程 - seven-ahz - 博客园  git的使用

git log 详解_简简单单兔呦-优快云博客_git log  git log详解

git restore指令和git restore --staged 的使用_酸菜。的博客-优快云博客_git restore  git restore指令和git restore --staged 的使用   

Git合并时遇到冲突或错误后取消合并 - 鲁小风lyf - 博客园   git合并的时候出现冲突,取消合并

git clone、git pull和git fetch的用法及区别 - sfornt - 博客园  git clone , git pull ,git fetch 的区别

git stash 用法总结和注意点 - 加个小鸡腿 - 博客园   git stash 的用法    :git stash 不作用于 untracked file (即没有在git 版本控制中的文件,是不能被git stash 存起来的) ,可作用于工作区和暂存区

pycharm配置git--图文教程_coder_oyang的博客-优快云博客_pycharm 配置git pycharm 配置git

git清除__pycache__文件 - xyztank - 博客园  git 清除 __pycache__ 文件

设置公钥

何谓公钥

  • 1.很多服务器都是需要认证的,ssh认证是其中的一种。在客户端生成公钥,把生成的公钥添加到服务器,你以后连接服务器就不用每次都输入用户名和密码了。

  • 2.很多git服务器都是用ssh认证方式,你需要把你生成的公钥发送给代码仓库管理员,让他给你添加到服务器上,你就可以通过ssh自由地拉取和提交代码了。

生成公钥

  • 1.如果通过上面的方式找不到公钥,你就需要先生成公钥了:ssh-keygen

  • 2.接着会确认存放公钥的地址,默认就是上面说的路径,直接enter键确认

  • 3.接着会要求输入密码和确认密码,如果不想设置密码直接不输入内容 按enter键

设置远程仓库

1. 按照上述步骤设置公钥

2.在github上添加仓库

3.执行: git remote add origin GitHub - tugenhua0707/testgit 

 增加一个新的远程仓库,并命名

$ git remote add [shortname] [url]

4.执行: git push -u origin master

config配置

git config --global user.name "xxx"

git config --global user.email "xxx"                #使用 -- global 参数,表示这台机器上所有的git仓库都使用这个配置

仓库初始化与克隆

命令作用
git init初始化新仓库
git clone <url>

克隆远程仓库 

 git clone :是一个从无到有的克隆操作,不需要进行 git init 初始化

clone来的 .git文件夹内存放着和远程仓库一模一样的版本库记录  :     

git clone https://github.com/user/repo.git 

git remote -v查看远程仓库地址
git remote add origin <url>添加远程仓库

基础工作流

以readme.txt 为文件名 为例

git add  readme.txt                                    #将该文件添加到暂存区里面去

git add .                                   # 添加当前目录下所有修改和新增文件(不含被删除的文件)

git commit -m 'xxxxxx'                               # 把文件提交到本地仓库,xxxx为提交的注释

git status                                             #查看是否还有文件未add ,或者是未commit,提交文件前 最好查看一下状态

git status -s (简洁模式)

git diff readme.txt                                 # 查看 readme.txt 修改的内容

查看历史

git log                                       #查看历史记录,显示最近到最远的显示日志,提交的版本号,时间,修改内容

git log --oneline    # 每一条历史记录归为一行显示 

备注:git reset --hard 会同时修改 工作区 和 暂存区 的数据  

cat readme.txt                   #查看readme.txt 的内容

git reflog                           #获取到commitid 

git  restore详解

git restore readme.txt  # 意思就是,把readme.txt文件在工作区做的修改全部撤销 

备注: Git 旧版本 用 git checkout , 新版本用git restore ,都可以撤销工作区的内容

 与 git reset 的区别

操作作用范围常用场景
git restore <文件>仅工作区(未 git add快速放弃本地修改
git reset <文件>仅暂存区(已 git add取消暂存但保留工作区修改
git reset --hard工作区+暂存区+提交历史彻底回退到某个提交(危险!)

rm readme.txt  # 删除文件   , 若删除后想恢复则可使用 git restore 

git创建新分支/ 切换分支

场景命令
创建分支git branch <分支名>
切换分支git  switch <分支名> 
查看所有分支(含远程)git branch -a
查看分支 (不含远程)git   branch 
创建并切换分支git switch -c <分支名>(推荐)
基于其他分支创建git switch -c <新分支名> <源分支名>
基于历史提交创建

git switch -c <分支名> <commit-hash>

快速切换回上一个分支

git switch -  

git checkout详解

一: 切换分支

切换分支新命令:

git switch main          # 切换到 main 分支
git switch -c new-feat   # 创建并切换到新分支

二:恢复文件

恢复文件新命令

git restore --source=main -- config.yml  # 从 main 分支恢复文件
git restore --staged app.js             # 取消暂存
git restore app.js                      # 丢弃工作区修改

三:分离头指针(Detached HEAD)

切换到某个提交的作用:让 HEAD 指针直接指向某个具体的提交(而不是分支)

常见场景

  • 查看历史代码
    比如你想看某次提交修复了哪些 Bug,直接切换到该提交即可查看当时的完整代码。

  • 临时测试旧版本
    如果最新版本有问题,可以切换到之前的稳定提交进行测试。

  • 找回被删除的文件
    如果某个文件在之后的提交中被删除了,可以切换到包含它的提交来恢复

git merge详解

1. 基础用法

合并其他分支到当前分支

git switch <目标分支>    # 切换到要合并到的分支(如 main)
git merge <来源分支>      # 将来源分支(如 feature)合并到目标分支

示例

git switch main         # 切换到主分支
git merge feature/login   # 将 feature/login 的修改合并到 main

2. 合并类型

Git 会根据分支历史自动选择合并策略:

(1)快进合并(Fast-Forward Merge)
  • 条件:来源分支是目标分支的直接后继(无分叉)。

  • 效果:目标分支指针直接移动到来源分支的最新提交,不会生成合并提交。

  • 触发方式(默认启用):

    git merge --ff <分支名>  # --ff 是默认选项,可省略
  • 可视化

    main: A — B — C
                  ↓
    feature:     D   (合并后 main 指向 D)
(2)非快进合并(No-Fast-Forward Merge)
  • 条件:分支历史有分叉(目标分支在来源分支分叉后有新提交)。

  • 效果:生成一个新的合并提交,保留完整历史。

  • 触发方式

    git merge --no-ff <分支名>  # 强制生成合并提交
  • 可视化

    main: A — B — C — E (合并提交)
                 ↗
    feature:     D

3. 解决合并冲突

当两个分支修改了同一文件的同一部分时,Git 会标记冲突:

冲突文件示例
<<<<<<< HEAD
当前分支的代码
=======
要合并的分支的代码
>>>>>>> feature/login
解决步骤
  1. 手动编辑文件,保留需要的代码(删除 <<<<<<<=======>>>>>>> 标记)。

  2. 标记冲突已解决:

    git add <冲突文件>  # 将文件加入暂存区
  3. 完成合并:

    git commit          # Git 会自动生成合并提交消息

4. 常用选项

选项作用
--no-ff强制生成合并提交(即使可以快进合并),保留完整历史。
--abort

终止合并,恢复到合并前的状态(适用于冲突无法解决时)。

 
git merge --abort 
--squash将来源分支的所有提交压缩为单个提交,再合并到目标分支。
-m "消息"为合并提交指定自定义消息(默认是 "Merge branch 'xxx'")

git删除命令

1. 删除文件

(1)从工作区和暂存区删除(同时物理删除文件)
git rm <文件名>          # 删除文件并暂存删除操作
git commit -m "删除文件" # 提交删除

2. 删除分支

(1)删除本地分支
git branch -d <分支名>    # 安全删除(仅当分支已合并时允许)
git branch -D <分支名>    # 强制删除(未合并的分支也会删除)
(2)删除远程分支
git push origin --delete <远程分支名>

3. 删除未跟踪文件/目录

(1)删除所有未跟踪文件(不包括 .gitignore 中的文件)
git clean -n  # 预览将被删除的文件(dry-run)
git clean -f  # 实际删除文件
git clean -fd # 删除文件和目录

4. 删除提交记录

(1)删除最新提交(保留修改)
git reset --soft HEAD~1    # 撤销提交但保留修改在暂存区
git reset --mixed HEAD~1   # 撤销提交且取消暂存(默认行为)
git reset --hard HEAD~1    # 彻底删除提交和修改(谨慎使用!)

git reset详解

模式命令格式影响范围适用场景
--softgit reset --soft <commit>仅移动分支指针,保留工作区和暂存区修改提交消息或合并提交
--mixedgit reset --mixed <commit>移动指针+取消暂存,保留工作区修改默认模式,撤销 git add
--hardgit reset --hard <commit>移动指针+丢弃所有修改(危险!)彻底回退到某个版本

3. 典型使用场景

场景 1:撤销最近的提交(保留修改)
git reset --soft HEAD~1   # 撤销提交但保留修改在暂存区
git reset HEAD~1          # 等效于 --mixed,修改保留在工作区

效果
HEAD 指向上一个提交,原提交的修改仍存在,可重新提交

场景 2:彻底回退到某个提交(丢弃所有修改)
git reset --hard a1b2c3d  # 强制回退到提交 a1b2c3d(慎用!)
git reset --hard origin/main # 回退到远程分支状态

风险:所有未提交的修改和后续提交都会丢失!

场景 3:取消暂存文件(撤销 git add

git reset <文件名>        # 从暂存区移除文件(保留工作区修改)
git reset .              # 取消所有暂存文件

场景 4:修改历史提交(需强制推送)
git reset --hard HEAD~3   # 丢弃最近3个提交
git push origin master --force  # 强制覆盖远程分支(协作时谨慎)

git revert 详解

git revert 用于安全撤销某次提交的更改,通过生成一个新的反向提交来抵消原提交的改动,不会重写历史

撤销单次提交
git revert <commit-hash>  # 撤销指定提交
  • 示例

    git revert a1b2c3d      # 撤销哈希以 a1b2c3d 开头的提交

撤销连续多个提交
git revert <oldest-commit>..<latest-commit>  # 左开右闭区间
  • 示例

    git revert HEAD~3..HEAD~1  # 撤销倒数第3到倒数第2个提交(不包含HEAD~3)

git reset 和 git revert 比较

与 git reset 的对比

git revertgit reset
安全:生成新提交,不修改历史危险:直接删除提交,重写历史
适合已推送的提交仅限本地未推送的提交
保留完整历史记录可能造成团队协作冲突
撤销中间提交时更清晰适合撤销最近的连续提交

选择建议

  • 需要撤销已推送的提交 → git revert

  • 撤销本地未推送的提交 → git reset

git reset 适用场景: 如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。  使用:  (1)  git reset --hard 目标版本号    (2) 使用“git push -f”提交更改: 此时如果用“git push”会报错,因为我们本地库HEAD指向的版本比远程库的要旧,所以我们要用“git push -f”强制推上去  

git revert  适用场景: git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西 。    使用:  (1)  git revert -n 版本号     注意: 这里可能会出现冲突,那么需要手动修改冲突的文件。而且要git add 文件名 (2)提交,使用“git commit -m 版本名  (3)使用“git push”推上远程库  

git stash 详解

git stash 的使用场景:  存在在master, 你当前在dev分支工作但是还不能上线,结果线上出现了bug,你需要新拉个bugfix分支去修复bug,此时你直接去切换到master分支去,就会让你把工作区的内容先stash起来

git stash   #将当前工作区隐藏起来

git stash list  # 获取stash 列表

git stash apply # 恢复当前工作区的内容 ,恢复后,stash内容并不删除,你需要使用命令git stash drop来删除

git stash drop  # 删除stash内容

git stash pop  # 恢复的同时把stash内容也删除了 

远程协作

命令作用
git fetch

下载远程更新(不合并)

git fetch : 更新远程代码到本地仓库   : git fetch 远程主机名 远程分支名 

git fetch origin master # 从远程的origin仓库的master分支下载代码到本地的origin master

git pull

拉取并合并远程更新

git switch main      # 切换到本地 main 分支
git pull origin main  # origin 指的是远程仓库的别名, 拉取远程 main 分支并合并

git pull origin master:branchtest 

#将远程主机origin的master分支拉取过来,与本地的branchtest分支合并 ; 

如果将冒号和后面的branchtest去掉,则表示将远程origin仓库的master分支拉取下来与本地当前分支合并

git push

推送本地提交到远程

命令格式

git push <远程仓库名> <本地分支名>:<远程分支名>

简化写法: 

git push   # 推送当前分支到已关联的远程分支

git push origin master  

# 把本地代码提交到远程仓库,推送时指定推送的分支为master ; 我们现在要推送到其他分支,比如dev分支上,我们使用命令 git push origin dev

git push -u origin <branch>

首次推送分支(需设置上游分支)

git push -u origin main  # -u 设置关联关系,后续可简写 git push

git push origin --delete <branch>删除远程分支
git fetch --prune同步远程已删除的分支

工作流撤销总结

1.在工作区的代码还未add :想要撤销修改,可使用 git restore   ,或者 git restore .   (撤销全部修改)  ; 该操作只改变了工作区

2.工作区的代码add到了暂存区,未commit

·若用户在工作区又加了新的内容,但是想撤销  可使用 git restore

·若用户add到暂存区的内容有误,想要撤销,可使用 git reset HEAD,该操作只改变暂存区,不改变工作区:

取消单个文件的暂存: 

git reset HEAD <文件名>        # 传统方式(效果相同) 
git restore --staged <文件名>  # Git 2.23+ 推荐方式

取消所有文件的暂存:

git reset HEAD                # 传统方式
git restore --staged . # 重置所有已暂存文件

备注: git reset 和git reset HEAD 存在细微的差别

3.git commit到了本地仓库,但是未git push到远程仓库:

注意: 彻底丢弃暂存区和工作区的修改

git reset --hard   (回到其中你想要的某个版)

或者  git reset --hard HEAD^ (回退到上一个版本)   

或者  git reset --hard HEAD~100(回退到前100个版本)

head 和master是什么?

master 是默认分支名称,而 HEAD 是一个动态指针,表示当前工作目录的位置

master: git默认创建的主分支名称

head: 是一个特殊的指针,指向当前所在的提交或者是分支; 它表示我当前的工作目录处于什么状态   (HEAD 本质上是一个指针,它指向当前工作分支的最新提交)

工作区 和 暂存区的区别

工作区: 电脑上看到的目录 

版本库:工作区有一个隐藏目录.git ,这个不属于工作区,这是版本库,版本库中存了很多东西,其中最重要的是 stage(暂存区),还有git 为我们自动创建了一个分支master ,以及指向master 的一个指针 HEAD

使用git 提交文件到版本库中有两步:使用git add 把文件添加进去, 使用git commit提交更改 实际上就是把暂存区的所有内容提交到当前分支上

状态对比表

状态含义如何进入该状态
Changes not staged for commit文件已修改但未暂存(针对已跟踪文件)修改文件后未执行 git add
Untracked files新增文件未被 Git 跟踪创建新文件后未执行 git add
Changes to be committed文件已暂存,等待提交执行 git add 后

  git 错误汇总

1. git出现Unlink of file 'venv/Scripts/python.exe' failed. Should I try again?  :   git操作出现Unlink of file '......' failed. Should I try again?问题_进阶的小小白的博客-优快云博客

2. Git 冲突:Your local changes would be overwritten by merge. Commit, stash or revert them to proceed.  解决冲突:Git 冲突:Your local changes would be overwritten by merge. Commit, stash or revert them to proceed._JoshuaJ的专栏-优快云博客

3. Branch 'master' set up to track remote branch 'master' from 'origin'. 的意思

你的本地 master 分支已经设置为跟踪远程仓库 origin 中的 master 分支。这意味着:

  1. 建立了跟踪关系:你的本地 master 分支现在会“跟踪”远程的 master 分支。这样,当你使用 git pull 或 git push 等命令时,Git 会自动将本地分支与远程分支同步。

  2. 默认行为:当你运行 git pull 或 git push 而不指定分支时,Git 会默认使用你跟踪的远程分支(在这里是 origin/master

4.   Git-命令行-拯救“Your local changes to the following files would be overwritten by checkout”

Git-命令行-拯救“Your local changes to the following files would be overwritten by checkout”_段浅浅的博客-优快云博客     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值