1.简介

0. git 配置
git config用于设置所有本地仓库的配置值,如user.name、user.email等。
| 命令 | 描述 |
|---|---|
| git config –global user.name “[firstname lastname]” | 全局,设置 Git 用户名。 |
| git config –global user.email “[valid-email]” | 全局,设置 Git 电子邮件。 |
| git config –global color.ui auto | 全局,启用 Git 输出自动着色,即 Git 在输出到终端时会自动着色。 |
| git config –list | 显示系统上 Git 的所有生效配置。 |
1. 开始
两种方式创建一个GIT仓库。一种远端创建仓库,执行git-clone命令克隆至本地;另一种是本地普通文件夹,执行git-init命令初始化为git仓库,再 git remote 添加远端后,git push至远端。
- git init: 将一个普通目录初始化为Git仓库。即,在此目录下创建
.git目录,包含Git仓库的基本结构,不涉及远端仓库。 - git clone: 从远端仓库完整clone至本地。即,初始化本地仓库(~ git init),从远端仓库创建一个包含所有文件、历史记录的本地仓库,并,创建
origin的git reemote指向远端仓库,自动切换至默认分支。
git clone 近似等于
git init、git remote add origin [git_url]、git fetch origin、git checkout -b main origin/main
2. 拉取远端信息
- git pull: 将从远端仓库拉取最新提交、并合并到当前本地分支。但不会拉取远端的新分支、标签。相当于
git fetch与git merge的组合命令。 - git fetch: 从远端仓库获取最新数据(存储在
refs/remotes),但不会自动合并或修改当前工作目录中的文件。
git pull 拉取并合并远程分支。先执行 git fetch,然后执行 git merge,可能会导致冲突。git pull --tags 拉取最新的提交和标签信息并合并。与 git pull 类似,但同时拉取标签信息。git pull --rebase 拉取并重新应用本地提交。使用rebase而不是merge,保持提交历史的线性。git fetch 拉取远端仓库的最新信息。默认更新origin远端的所有本地跟踪分支,但不会自动合并到当前分支。git fetch --all 拉取所有远程仓库的最新信息。更新所有remote的所有本地跟踪分支。git fetch --tags 拉取最新的标签信息。确保本地仓库中的标签是最新的。git fetch <remote> <branch> 拉取指定远端特定分支的最新信息。remote和branch都是可选参数。
如果需要同步远程仓库中的所有最新信息(包括新分支和标签),必须执行
git fetch。在多人协作的项目中,定期执行git fetch是一个很好的实践,可以及时了解远程仓库的最新状态,避免冲突.
除此之外,还有
git clone、git remote update、git ls-remote、git remote prune是直接与远程仓库交互,拉取信息的。
3. 主线操作
| |


4. 本地工作目录切换
- git checkout: 用来切换工作目录状态。四种用途:切换分支(
git checkout [分支名])、检出远端分支(git checkout origin/[分支名])、创建并切换至新分支(git checkout -b [New_branch] [S_Branch])、检出特定提交(git checkout [COMMIT_HASH])。
checkout命令只是本地仓库的分支之间切换,包括
检出远端分支, 也仅仅是将工作目录却换至git fetch获取的远端跟踪分支上。
5. 分支操作
| 命令 | 描述 |
|---|---|
git branch | 列出所有本地分支 |
git branch -a | 列出所有本地和远程分支 |
git branch [分支名] | 创建一个新分支 |
git branch -d [分支名:master] | 删除一个本地分支 |
git branch -dr [分支名:origin/master] | 删除一个本地 远端跟踪分支 |
git push origin --delete [分支名] | 删除一个远程分支 |
git checkout -b [分支名] | 创建并切换到一个新分支 |
git checkout -b [分支名] origin/[分支名] | 克隆并切换到一个远程分支 |
git checkout [分支名] | 切换到一个分支 |
git checkout -- | 切换到上次检出的分支 |
git checkout -- [文件名.txt] | 用于丢弃对文件所做的任何更改 |
git merge [分支名] | 将一个分支合并到当前活动分支 |
4. 暂存改动,避免冲突
用于使用提交创建工作的临时快照。这在各种情况下都很有用,例如试验更改或处理尚未准备好永久提交到版本历史的功能。
| |
撤销操作
- 撤回工作区改动
用于快速丢弃对文件的改动,但不影响已暂存的文件。
| |
- 撤销 git add 操作
| |
- 撤销 git commit 操作
| |

- 撤回 git push 操作
当执行了
git push命令想要撤回,可以使用git reset HEAD^将本地仓库回退到当前版本的上一个版本,代码的修改会保留在工作区,然后使用git push origin xxx --force将本地仓库当前版本的代码强制推送到远程仓库。
| |
5. archive远端指定代码
archive 命令是将本地仓库的分支打包,不涉及远端仓库,因此需要 fetch 远端的信息
| |
注:压缩包通过
tar -xvf master.tar解压,还可以通过--format=zip归档zip格式压缩包,默认归档tar包。
概念说明
git仓库结构
| |
git config 级别
可以通过命令
git config --list查看所有配置,git config --system --list查看系统级别配置;以此类推。
–local 本地级。配置对单个仓库生效(配置文件位置:repository folder/.git/config)
–global 全局级。配置对当前用户所有仓库生效(配置文件位置:~/.gitconfig)
–system 系统级。配置对当前机器所有用户生效(配置文件位置:/etc/gitconfig)
术语
| 术语 | 描述 |
|---|---|
| origin | origin 代表远端仓库。当使用git push -u origin local_branch时,系统提示把本地分支推送到远程仓库。通常有一个默认的远程仓库,origin 就代表这个默认仓库。还可以通过命令git remote rename origin new_name修改origin的名称 |
| HEAD | HEAD 代表活动/当前分支的最后一次提交。每个版本库只有一个当前分支,因此也只有一个HEAD。可以通过命令cat .git/HEAD查看git仓库的HEAD指向哪里。当checkout命令应用于特定的历史提交、标签、远程分支时,就会出现分离HEAD的情况。 |
| master | master 是默认主分支,git-2.28版本开始,默认主分支名称改为main。 。 |
| branch | branch就像是版本库历史中的一个分叉。一个branch代表一条独立的开发线路,就像叉齿一样。 |
| Workspace | 工作区。 |
| stage(index) | 暂存区,是建议的下一次提交,也被称为index。 |
| repository | 本地仓库。 |
| remote | 远端仓库。 |
