git常用命令
什么是git?
Git是一种分布式版本控制系统,用于跟踪项目文件的更改,特别是源代码。它允许多个开发者协作,能够有效地管理项目的版本历史。Git可以记录项目的每一次更改,使得开发者可以随时查看和恢复到以前的版本
Git通常和GitHub、GitLab、Gitee、Bitbucket、Azure DevOps等远端代码托管平台结合使用
Git常用命令
git init
在本地项目repo执行git init,会初始化这个repo,并在当前文件夹下创建一个.git文件夹.
如果从github上克隆项目到本地,可能会带有一个 .git 文件夹,该文件夹包含了该仓库的所有版本控制信息,包括提交历史、分支、标签等。它是Git用来跟踪文件变化和版本控制的核心部分。如果删除了.git文件夹,本地目录将不再被Git视为版本控制的项目,如果一个项目已经有.git文件夹,可以先删掉原来的再使用git init命令重新初始化。
git clone
用于从远端仓库克隆项目完整的代码库到本地,包括 .git 文件夹。基本语法如下
1 | git clone <repository-url> |
git status
查询repo的状态.
On branch main:当前在 main 分支上
Changes not staged for commit:有一些文件已被修改但尚未准备好提交
Untracked files:有一个未被跟踪的文件,Git 没有管理这个文件
no changes added to commit:没有任何更改被添加到提交中
git log
查看 Git 仓库的提交历史,显示所有提交的详细信息,包括每个提交的哈希值、作者、日期和提交信息。常用的选项包括下面几种
git log: 显示所有提交的提交信息,太多时可以按q退出查看
git log --oneline:以简洁的单行格式显示每个提交。git log -n <number>:只显示最近的<number>次提交。git log --graph:以图形方式显示提交历史,适合查看分支和合并情况。git log --stat:显示每个提交的文件更改统计信息。git log --author="name":只显示特定作者的提交记录
git add
将文件的更改添加到 Git 的暂存区(本地git的数据库中),为下一次提交做准备
常用命令如下:
git add filename.txt:添加单个文件git add file1.txt file2.txt:添加多个文件git add .:添加所有修改的文件(包括删除文件)git add *.md:添加特定类型的文件,例如添加所有.md文件
git diff
用于比较文件之间的不同之处,可以帮助查看尚未提交的更改、两个分支之间的差异、或某个提交的内容等。常用命令如下:
- git diff:查看工作目录和暂存区之间的差异
git diff <file>:查看特定文件的差异git diff <commit-hash>:查看某个提交的差异
git commit
提交已经被add进来的改动,提交到本地的文件夹中,以便后续传到远端仓库,要先add再commit,
-m 是 “message” 的缩写
git commit -m "Your commit message":-m 选项后面跟的是提交信息,用于描述本次提交的内容,一般是一两句简述,说明做了什么改动git commit -am "Your commit message":添加并提交,不需要先进性git add .,-a 选项会自动添加已跟踪的文件的更改(未跟踪的文件需要先使用git add添加)。
.gitignore文件
.gitignore 文件用于告诉 Git 哪些文件或目录在版本控制中应被忽略,写在.gitignore中的文件不会被 Git 跟踪,不会出现在提交中。
使用 git init 初始化一个新的 Git 仓库时,.gitignore 文件不会自动生成,需要手动创建 .gitignore 文件并添加想要 Git 忽略的文件和目录。.gitignore 文件本身也会被 Git 进行版本控制
git branch
用于管理 Git 仓库中的分支。它可以用于查看、创建和删除分支。常用的用法如下:
git branch:查看所有分支git branch <branch-name>:创建新分支,但不会切换到该分支git branch -d <branch-name>:删除分支git branch -m <old-branch-name> <new-branch-name>:重命名分支
git remote
管理 Git 仓库的远程连接,可以查看、添加、修改和删除远程仓库的引用。
git remote:查看远程仓库git remote -v:查看远程仓库详细信息git remote add <name> <url>:添加远程仓库git remote set-url <name> <new-url>:修改远程仓库URLgit remote remove <name>:删除远程仓库git remote rename <old-name> <new-name>:远程仓库重命名
git pull
从远程仓库获取最新的更改并将其合并到当前分支,它实际上是 git fetch 和 git merge 的组合。
git pull:从默认远程仓库拉取更改git pull origin main:从指定的远程仓库和分支拉取,origin为远程仓库名称(可以是别的名称或分支),main为所要拉取的分支
git push
将本地仓库中的更改上传到远程仓库,通常用于将本地提交(commit)后的更新推送到指定的远程分支。
1 | # 推送到默认远程仓库仓库 |
git checkout
用于切换分支或恢复文件,git checkout 和 git branch 都可以用来创建分支,但它们的用法和行为有所不同,主要在于创建后会不会切换到新创建的分支
git checkout <branch-name>:切换分支git checkout -b <new-branch-name>:创建新分支并立即切换到该分支git checkout -- <file-name>:恢复文件,把file.txt恢复到最后一次提交时的状态
git merge命令
将一个分支的更改合并到当前分支,一般都是先切换到main分支再执行把其他分支上的修改合并到main分支,可能会出现合并冲突
git merge <branch-name>:将指定的<branch-name>分支的更改合并到当前分支
git fetch命令
用于从远程仓库获取更新,但不会影响当前工作分支,因为它但不会自动合并这些更改到当前main分支,需要手动合并,除非使用的是git pull
git fetch,从默认远程仓库获取更改,一般是origingit fetch upstream:从指定远程仓库获取更改,此处是从名为upstream的远程仓库获取最新更改
git tag
用于创建、列出和管理 Git 仓库中的标签。标签通常用于标记特定的提交,如版本发布或重要里程碑。
git tag:列出所有标签git tag <tag-name>:创建轻量标签,轻量标签是一个简单的指向某个提交的引用,没有附加的元数据。例如git tag v1.0git tag -a <tag-name> -m "Tag message":创建带注释的标签,带注释的标签可以包含更详细的信息,如作者、日期和标签信息,适合用于发布版本,例如git tag -a v1.0 -m "Release version 1.0"
git rm
用于从 Git 仓库中删除文件。它会在删除文件的同时将更改标记为待提交状态。这使得文件删除过程变得简单而一致。
git rm <file-name>:这将删除文件,并在下次提交时记录此更改git rm -r <directory-name>:删除目录,要递归删除目录及其内容,可以使用-r选项,有点像Linux删除文件夹及其下面的内容
git reset
用于重置当前分支的 HEAD 指针到指定的提交,也就是回退到某个版本或之前的提交,挺重要的一个命令,还不太懂
git config
用于设置 Git 配置选项,包括用户信息、编辑器、合并工具等,配置可以在三个层级进行:系统级、用户级和仓库级。
git config --list:查看当前配置git config --global user.name "Your Name":设置全局用户名git config --global user.email "your.email@example.com":设置全局用户邮箱git config user.name:查看用户配置
检查git连接状态
可以通过以下命令测试能否通过 SSH 连接 GitHub
1 | ssh -T git@github.com |
如果配置正确,应该看到一条类似于以下的信息,其中 `username 是你的 GitHub 用户名
1 | # 连接成功的回显信息如下 |
便捷表格
| 命令 | 功能 |
|---|---|
| git init | 初始化一个新的 Git 仓库 |
| git clone | 克隆一个远程仓库到本地 |
| git status | 查看工作目录和暂存区的状态 |
| git add | 将更改添加到暂存区 |
| git commit | 提交暂存区的更改 |
| git push | 将本地提交推送到远程仓库 |
| git pull | 从远程仓库拉取并合并更改到当前分支 |
| git fetch | 从远程仓库获取更新,但不合并 |
| git branch | 列出、创建或删除分支 |
| git checkout | 切换分支或恢复文件 |
| git merge | 合并两个分支的更改 |
| git tag | 创建、列出或删除标签 |
| git rebase | 将一个分支的更改应用到另一个分支上 |
| git cherry-pick | 从一个分支中选择特定提交并应用到当前分支 |
| git stash | 暂存未提交的更改,以便清理工作目录 |
| git reset | 重置当前分支到特定提交,可以选择保留或丢弃更改 |
| git log | 查看提交历史记录 |
| git diff | 查看文件或提交之间的差异 |
| git remote | 管理远程仓库 |
| git config | 配置 Git 设置,如用户名和邮箱 |
| git blame | 查看每一行代码的最后修改人及时间 |
| git reflog | 查看引用日志,记录所有更改的历史 |
git管理不同仓库问题
在 Git 中,每个仓库都有自己的配置,在不同的项目目录中使用 Git 时,每个项目的 Git 配置是独立的,每个项目都有自己的远程仓库配置,在执行 git push 时,不需要每次都指定远程仓库的名称和地址。Git 会根据该项目中的设置自动将代码推送到相应的远程仓库
独立的 Git 仓库: 每个 Git 仓库都有一个 .git 目录,这个目录包含了该仓库的所有配置信息。即使是在同一台电脑上,不同的项目路径也可以各自管理不同的 Git 仓库。
推送行为: 在项目目录下执行 git push 时,Git 会根据该仓库的远程配置推送代码。如果在 hexo/source/_posts 目录下,那么它只会推送到 hexo_source 这个远程仓库,而不是其他项目的远程仓库。
同一个本地仓库推送到不同的远程仓库
多个远程仓库指的是在同一个本地 Git 仓库中配置多个不同的远程仓库地址。
主要目的是为了更好地管理代码、备份数据、或者在多个开发环境之间进行协作,常见场景如下:
- 备份远程仓库:为了防止数据丢失,开发者可能希望将代码推送到多个远程仓库,以确保即使一个仓库出现问题,代码依然可以从其他仓库中恢复。
1 | git remote add origin git@github.com:user/repo.git # 主仓库 |
- 在不同平台上托管:一个项目可能同时在多个代码托管平台上托管,比如 GitHub、GitLab 或 Bitbucket。开发者可能需要在这些平台之间保持代码同步。
1 | git remote add github git@github.com:user/repo.git # GitHub |
- 多人协作开发:在团队开发中,不同的团队成员可能使用不同的远程仓库,或者某些成员需要使用一个专门的开发仓库。
1 | git remote add dev-team git@github.com:team/dev-repo.git # 开发团队仓库 |
- 还有很多其他场景……






