git 笔记

  • git软件大全
    • Git GUI 客户端
    • Git IDE 插件
    • Git 浏览器插件
    • 在线 Git 代码托管平台
    • 搭建 Git 服务
    • Git 教程
    • Git 常用命令

目录


安装 git

配置 git

账号密码管理仓库

  • Windows:打开控制面板→搜索凭据→点击管理 Windows 凭据→找到你的gitee凭据操作
  • Mac:打开钥匙串访问

配置ssh免密管理仓库

1
2
3
4
5
# 生成 ssh 密钥
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 复制公钥
clip < ~/.ssh/id_rsa.pub # Windows
pbcopy < ~/.ssh/id_rsa.pub # Mac

配置文件

1
2
3
less ~/.gitconfig # 查看全局配置
vi .git/config # 编辑当前仓库配置
vi ~/.gitconfig # 编辑全局配置

配置ssh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Host github.com
HostName github.com
User isme
PreferredAuthentications publickey
IdentityFile C:\Users\你的用户名\.ssh\id_rsa

Host code.aliyun.com
HostName code.aliyun.com
User isme
PreferredAuthentications publickey
IdentityFile C:\Users\你的用户名\.ssh\alicode\id_rsa

Host gitlab.com
HostName gitlab.com
User isme
PreferredAuthentications publickey
IdentityFile C:\Users\你的用户名\.ssh\gitlab\id_rsa

常用操作

初始化仓库

1
2
3
4
5
6
git init
git add README.md # 或 git add .
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/yourname/yourrepo.git
git push -u origin main

已有仓库:

1
2
3
git remote add origin https://github.com/yourname/yourrepo.git
git branch -M main
git push -u origin main

配置提交忽略文件或文件夹(.gitignore)

在项目根目录新建 .gitignore 文件

1
2
3
4
5
.history
index.js
src/index.js
theme/default/
node_modules/

查看提交记录

  • 所有提交:git log
  • 某人提交:git log --author='用户名'

配置用户名和邮箱

1
2
3
4
git config --global user.name 'yourname'
git config --global user.email 'your@email.com'
git config --global --list # 查看配置信息
git config --global --remove-section user # 删除 user

想要修改项目中的文件时如何进行操作

  • 查看状态:git status
  • 添加到暂存区:git add 文件名
  • 提交:git commit -m "描述"
  • 查看提交记录:git log

文件删除/重命名/移动

  • 删除:git rm 文件名
  • 重命名:git mv 旧名 新名
  • 移动:git mv 文件 路径/新文件名

查看文件变化

  • 查看差异:git diff
  • 查看历史:git log -p 文件名

操作失误还原

  • 单文件还原:git checkout -- 文件名
  • 撤销暂存区:git reset HEAD 文件名

版本回退

  • 回退到上一个版本:git reset --hard HEAD^
  • 回退到指定版本:git reset --hard 版本ID

文件回退到指定版本

1
2
3
4
git log
git checkout 版本ID -- 文件名
git add .
git commit -m "回退文件到指定版本"

推送到远程仓库

  • 推送:git push origin main
  • 设置默认远程:git push --set-upstream origin main

标签管理

1
2
3
4
5
git tag v1.0
git tag v0.5 9286adde # 指定 commit
git tag # 查看
git tag -d v0.5 # 删除
git push origin v1.0 # 推送

分支管理

  • 创建分支:git branch dev
  • 查看分支:git branch
  • 切换分支:git checkout dev
  • 删除分支:git branch -d 分支名
  • 强制删除:git branch -D 分支名
  • 创建并切换:git checkout -b 分支名

分支合并与冲突

  • 合并分支:git checkout mastergit merge dev
  • 冲突解决:手动处理冲突后 git add .git commit -m "解决冲突"

多人协作

  • 查看日志:git log --oneline --graph
  • 删除远程分支:git push origin --delete 分支名
  • 关联远程分支:git checkout -b dev remotes/origin/dev

远程库与本地库不一致解决

  • 推送失败时:git pull --rebase origin main,再 git push origin main

  • git commit -m '移动文件到文件夹 并重命名 并提交'

文件有变化时如何查看文件前后变化

文件重命名+移动+各种操作后,命令行查看文件的前后变化

  • 方法一
    • 格式:git log --pretty=online 文件的所在位置 名称 或 路径/名称
    • git log --pretty=oneline home/demo.html
    • 出来了 ID head -> 分支(master) 描述:移动文件并且重命名
    • 复制 ID
    • 格式:git show ID
    • git show b435ec75eabc959559a5sd9adasdsadasdas
  • 方法二
    • 格式:git log -p 文件的所在位置 名称 或 路径/名称
    • git log -p home/demo.html

操作失误的情况下如何实现一键还原

文件还没有提交到暂存区之前,让代码回到上一次提交的状态

  • 针对单个文件的还原
  • 自己找不同,手动还原
  • git diff
  • 红色删掉的,绿色添加的

命令行操作

  • git status
  • modified:home/demo.html 说明有改动的文件,那就还原他
  • git checkout -- home/home.html

不再追踪时如何实现撤销追踪操作

文件已经提交到暂存区,git 会对文件进行追踪,所以需要撤销追踪,然后还原

  • git reset HEAD home/demo.html
  • git checkout -- home/home.html

想要回到上一版本或者指定版本时如何进行操作

一个项目提交到暂存区 5 次,项目快速退回到第 3 次 提交的状态

  • 方法一
    • ^ 一个(^)代表回退一个版本,^ 两个(^^)代表回退两个版本,就到第 3 次 提交
    • git reset --hard HEAD^^
  • 方法二
    • 获取需要回退到的版本 ID (可以取前 7 位,也可以全部复制)
    • git log
    • 回退指定版本 ID(可以是 ID 前 7 位,也可以是完整 ID)
    • git reset --hard ID

想要将某一文件回到指定版本时如何进行操作

一个 项目 提交到暂存区 5 次,指定文件 快速退回到第 3 次 提交的状态

  • 获取要回退的版本 ID (可以取前 7 位)
  • git log
  • git checkout e748986 -- demo.html
  • git checkout e748986 -- home/home.html
  • git add .
  • git commit -m 将指定文件回退到指定版本

想要修改内容之后推送至远程仓库时如何进行操作

  • 推送到远程的master支上git push origin master
  • 设置默认推送远程地址git push --set-upstream origin main(设置成功后下次只需要git push即可)

想要给每个版本创建一个独特标签,做所有版本

  • 创建 taggit tag v1.0
  • 给指定 commit 版本 创建 taggit tag v0.5 9286adde
  • 查看 taggit tag
  • 删除 taggit tag -d v0.5
  • 推送 tag 到远程仓库git push origin v1.0

创建的 tag 默认 加到最新的一次 commit 上面

想要切换、删除分支时如何进行操作

分支操作:需要完成某些功能,从主线中剥离出来一些支线,由支线完成单独的功能,最后把支线合并到主线

  • 创建分支git branch dev
  • 查看分支git branch
  • 切换分支git checkout dev
  • 删除分支(不能删除当前的分支)git branch -d test
  • 强制删除分支(分支处于 commit ,没有 push 到远程仓库的状态也是不能删除)git branch -D test
  • 创建分支并切换到分支git checkout -b test

想要合并分支时如何进行操作

分支开发完成后,commit 到暂存区,合并到主线,
切换主线分支,然后把 dev 分支 合并到主线 master 分支

  • git checkout master
  • git branch
  • git merge dev dev合并到master dev 分支没有变化,master 是合并后的代码

当合并分支有冲突时如何正确的合并分支

两人都改了同一个文件后进行合并git merge dev

  • 解决方法一
    • 冲突,忽略 dev 分支代码,保留原分支(当前分支)内容
    • git merge --abort
  • 解决方法二
    • 手动处理冲突
    • git add .
    • git commit
    • 可编辑界面,按 i 可输入 加注释:这是解决冲突之后的正确代码,解决了 test.html 当中的冲突
    • 退出编辑:esc-->:wq-->enter
    • git commit -m 解决冲突之后的代码

不同人想要查看版本路线如何进行操作

  • 查看日志git log
  • 查看精简日志git log --oneline
  • 查看版本路线,分支日志git log --oneline --graph

不同人想要删除不想要的分支如何操作

  • 拉取所有的远程仓库git fetch
  • 查看远程分支git branch -av
  • 删除远程仓库分支(1.改分支是不是不需要了 2.该分支有没有合并到主分支)git push origin --delete dev

不同人修改了不同文件如何处理

张三给远程仓库 dev 提交了代码,修改了 a.html 文件,当前用户改了 b.html 需要提交到远程仓库

  • 查看远程分支
  • git branch -av
  • 出来了 remotes/origin/dev
  • 把远程的仓库 dev 分支 代码合并到暂存区的 dev 分支,再把暂存区的 dev 分支提交到远程仓库
  • git merge origin/dev
  • 按 i 编辑加入注释,退出编辑:esc—>:wq–>enter
  • 提交到远程 dev 仓库
  • git push

不同人修改相同的文件如何操作

  • 添加用户,模拟 A 用户 可忽略
    • git config --add --global user.name 'cc'
    • git config --add --global user.email 'qq@qq.com'
  • 查看本地分支与远程分支的关联
    • git branch -av
  • 远端分支与本地分支做关联
    • git checkout -b dev remotes/origin/dev
  • 对项目进行改动,然后提交
    • git add .
    • git commit -m 我需改的
    • git push
  • B 用户修改文件提交
    • git branch -av
    • git fetch
    • git branch -av
    • git checkout -b dev remotes/origin/dev
  • 对项目进行改动,然后提交
    • git add .
    • git commit -m 他需改的
    • git push

远程库与本地库不一致解决

  • 提交git push origin main
  • 报错error: failed to push some refs to 'https://github.com/cxvh/***'
  • 解决方法git pull --rebase origin main
  • 该命令的意思是把远程库中的更新合并到(pull=fetch+merge)本地库中,–-rebase的作用是取消掉本地库中刚刚的commit,并把他们接到更新后的版本库之中。出现如下图执行pull执行成功后,可以成功执行git push origin master操作。