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 | 远端仓库。 |