📝个人Git备忘录
城南花已开 Lv5

参考廖雪峰老师的教程记录一下学习Git的过程

简介 - Git教程 - 廖雪峰的官方网站

Git的常见命令和基本用法

初始化Git仓库

初始化一个新的 Git 仓库:

1
git init 

克隆远程仓库

从远程仓库克隆代码:

1
git clone <repository-url>

查看状态

查看当前文件的状态(已修改、未追踪等):

1
git status

添加文件到暂存区

将更改的文件添加到暂存区:

1
git add <file>

提交更改

提交暂存区的更改:

1
git commit -m "Your commit message"

查看提交历史

查看提交历史:

1
2
git log
git log --oneline # 以单行格式查看提交

分支操作

  • 创建新分支:

    1
    git branch <branch-name>
  • 切换到指定分支:

    1
    git checkout <branch-name>

    或者使用git switch

    1
    git switch <branch-name>
  • 创建并切换到新分支:

    1
    git checkout -b <branch-name>
  • 删除本地分支:

    1
    git branch -d <branch-name>
  • 查看当前所有分支:

    1
    git branch

合并分支

  • 将一个分支合并到当前分支:

    1
    git merge <branch-name>
  • 将当前分支的提交变基到 master 分支 假设你当前处于 feature 分支,并且希望将它的修改“变基”到 master 分支的最新提交上:

    1
    2
    git checkout feature  # 切换到要变基的分支
    git rebase master # 将当前分支变基到 master 上
  • 将分支变基到最新的远程分支 假设你有一个本地分支 feature,而远程仓库的 master 分支有了新的提交,你想要将 feature 分支的提交放到远程 master 上的最新提交之后:

    1
    2
    3
    git fetch origin       # 拉取远程仓库的更新
    git checkout feature # 切换到需要变基的分支
    git rebase origin/master # 将本地 feature 分支变基到远程 master

常见的 rebase 选项

  • **--continue**:如果在变基过程中发生冲突,解决冲突后,继续变基:

    1
    git rebase --continue
  • **--abort**:如果在变基过程中不想继续,可以中止变基操作,恢复到变基之前的状态:

    1
    git rebase --abort
  • **--skip**:如果你希望跳过当前有冲突的提交,直接跳到下一个提交:

    1
    git rebase --skip
    • merge 会保留所有的提交历史,并生成一个新的合并提交。这对于展示一个清晰的分支历史非常有用,尤其是当团队协作时。

    • rebase 会重写历史,消除合并提交,使历史线性化。适用于个人开发过程中,或者在合并分支之前清理历史。

推送和拉取远程仓库

  • 推送本地分支到远程仓库:

    1
    git push origin <branch-name>
  • 从远程仓库拉取最新更改:

    1
    git pull origin <branch-name>

查看差异

  • 查看文件更改的差异:

    1
    git diff

恢复文件

  • 恢复工作区的文件(撤销本地修改):

    1
    git checkout -- <file>

重置修改

  • 重置本地分支到某个提交:

    1
    git reset --hard <commit-id>

删除远程分支

  • 删除远程仓库中的分支:

    1
    git push origin --delete <branch-name>

查看远程仓库

  • 查看当前 Git 仓库的远程地址:

    1
    git remote -v

配置 Git

  • 配置用户名和邮箱:

    1
    2
    git config --global user.name "Your Name"
    git config --global user.email "[email protected]"

实战应用记录

Github上新建的repository需要使用git初始化,添加README.md(可选)

1
2
3
4
5
6
7
echo "# Test" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/xxxx/xxxx.git
git push -u origin main
1
2
3
git remote add origin https://github.com/xxxx/xxxx.git
git branch -M main
git push -u origin main

简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

我个人认为最核心的就是三个命令了,掌握这三个就足够了

1
2
3
git init
git add
git commit -m ""

顺便再解释一下git fetchgit pull的区别

git fetch

git fetch 是从远程仓库获取最新的提交(包括新分支、标签等),但它不会自动合并这些变化到本地分支。

  • 作用:更新本地仓库的远程跟踪分支(如 origin/master),但是本地工作目录和当前分支不会发生任何变化。
  • 何时使用
    • 当你想要查看远程仓库的最新状态,但不想立即合并这些更改到当前分支时。
    • 当你想检查远程分支的变化,再决定是否要合并到本地分支。
1
git fetch origin  # 拉取远程仓库的所有变化,但不合并到当前分支

拉取完成后,你可以查看本地的远程跟踪分支(如 origin/master):

1
git log origin/master

git pull

git pullgit fetchgit merge 的结合体。它首先会执行 git fetch 拉取远程更新,然后自动将远程仓库的变化合并到当前分支。

  • 作用:从远程仓库获取最新变化,并自动合并到当前工作分支。
  • 何时使用
    • 当你希望快速将远程分支的变化合并到当前分支时,git pull 会一站式完成拉取和合并。
    • 在和团队合作时,尤其是在多人协作的项目中,常常用来同步本地分支和远程分支。
1
git pull origin master  # 拉取远程 origin 仓库的 master 分支,并合并到当前分支

主要区别

功能/命令 git fetch git pull
获取更新 拉取远程更新,但不合并。 拉取远程更新,并自动合并到当前分支。
合并行为 不会自动合并,只更新远程跟踪分支。 自动将远程更新合并到当前工作分支。
控制 需要手动合并远程变化(如使用 git mergegit rebase)。 自动合并,合并方式是默认的(通常是 merge)。
使用场景 用于检查远程更新,避免直接影响当前工作。 用于快速同步远程仓库的变化到本地分支。

  1. 恢复未跟踪的文件

如果你有一些文件是新添加的,但尚未执行 git add,这些文件是 未跟踪的文件,可以使用以下命令来删除它们:

  • 删除未跟踪的文件(即删除新创建的文件)

    1
    git clean -f
  • 删除未跟踪的目录(如果有新创建的文件夹):

    1
    git clean -fd

注意:git clean 会永久删除未跟踪的文件或目录,请谨慎使用。

  1. 删除文件

    git rm 是 Git 中用于删除文件的命令,它既可以删除 已跟踪的文件(即已经被 Git 版本控制的文件),也可以用于从 Git 仓库中移除文件(但可选择保留工作区副本)。

    命令 作用 备注
    git rm <file> 从 Git 仓库和工作区删除文件,添加到暂存区。 删除文件并提交删除操作。
    git rm -f <file> 强制删除文件,删除只读文件或已修改的文件。 强制删除文件,通常用于冲突或只读文件。
    git rm --cached <file> 从 Git 仓库移除文件,保留工作区的副本。 停止跟踪文件,文件仍在本地保留。再进行git clean -f删除工作区的文件
    git rm -r <dir> 删除目录及其中的所有文件。 用于删除目录及其内容。
    git rm --dry-run <file> 模拟删除操作,不执行实际删除。 用来查看哪些文件会被删除。
    git rm --ignore-unmatch <file> 忽略未跟踪的文件,避免报错。 跳过未跟踪文件,避免删除时的错误。
  2. 撤销对文件的修改

git restoregit checkout -- file 在某些情况下是等价的,但是更加建议使用git restore

对比总结:

功能 git restore git checkout --
用途 专门用于恢复文件到上次提交的状态或指定提交状态 用于恢复文件或目录到上次提交的状态
语法 更直观,git restore <file> 使用 git checkout -- <file>(较为冗长)
是否修改历史 不修改历史,只影响工作区和暂存区 只影响工作区,不修改 Git 历史
恢复工作区文件 git restore <file>git restore . git checkout -- <file>git checkout -- .
恢复暂存区文件 git restore --staged <file> 无直接等价命令,git reset 用来撤销 git add
支持更清晰的语义 是的 git checkout 是多用途命令,语义不如 git restore 清晰
  1. 撤销git add

git resetgit restore --staged 在许多情况下是等价的,特别是当你想要撤销 git add(即将文件从暂存区移除)时。它们的作用都是将文件从暂存区移除,但两者的语法和适用范围有所不同。

对比:git reset vs git restore --staged

  1. **git reset**(用于撤销 git add):

    • **git reset <file>**:将文件从暂存区移除,恢复到未暂存状态(即不再待提交)。
    • 它会影响 暂存区,但 不会改变工作区的内容。文件在工作区的修改仍然保留。
  2. **git restore --staged**:

    • git restore --staged <file>:将文件从暂存区移除,恢复到未暂存状态,不改变工作区的内容
    • 这是 Git 2.23 版本引入的新命令,设计上更加清晰和直观,专门用于恢复暂存区的文件。

如果你只需要撤销 git addgit restore --staged 更推荐,因为它语法清晰、直观。如果你需要进行更多复杂的操作,git reset 是一个更灵活的选择。

其他更多命令

标签命令

命令 作用 备注
git tag 查看所有标签 列出所有标签。
git tag <tag> 创建一个标签 创建一个标签,指向当前提交。
git tag -a <tag> 创建一个带注释的标签 创建带有注释的标签。
git push <remote> <tag> 推送标签到远程仓库 将本地标签推送到远程仓库。

其他常用命令

命令 作用 备注
git stash 将当前工作区的修改保存到栈中,恢复干净工作区 临时保存当前的工作进度,稍后恢复。
git stash pop 恢复栈中的修改,并从栈中删除 恢复最后一次保存的工作进度。
git stash list 查看当前栈中的所有修改 列出所有保存的工作进度。
git bisect 使用二分法查找引入 bug 的提交 用于调试和定位特定提交引入的 bug。
由 Hexo 驱动 & 主题 Keep
本站由 提供部署服务
总字数 258.9k