Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理或大或小的项目。利用 git,可以在本地很好地控制项目版本,让项目有条不紊地进行;通过提交、拉取、推送等操作,与同事参与远程共同开发。
在这里推荐一手 Git 闯关游戏 Learn Git Branch,有一定基础的可以用来提升熟练度。
此处只涉及 Windows 系统上的安装
安装包下载地址:https://gitforwindows.org/
官网慢,可以用国内的镜像:https://npm.taobao.org/mirrors/git-for-windows/
完成安装之后,就可以在 cmd 或 powershell 等命令行工具使用 git 工具了。一般情况下,在某个文件夹点击右键,你可以看到 Git Bash Here,通过这个也可以打开 Git 工具。
Git 提供了一个叫做 git config 的工具,用于配置或读取相应的工作环境变量。这些环境变量决定了 Git 在各个环节的管理员信息和使用方式,存放于 /etc/gitconfig (所有用户生效 --system) 或 ~/.gitconfig (当前用户配置 --global)。
用户信息
$ git config --global user.name "yourname"
$ git config --global user.email youremail
文本编辑器
下面代码设置的是 vscode 为默认编辑器,请将路径改为你电脑的路径。
git config --global core.editor D:\Vscode\Microsoft VS Code\Code.exe
查看配置信息
$ git config --list
Git 的本地仓库主要由工作区、暂存区、版本库组成。当你推送到远程仓库时,本地仓库与远程仓库就建立了关系。
.git/index
中.git
,里面存储着版本的信息上述三个组成部分的联系如下:
仅大致了解一下,结合后面一起理解
order | introduction |
---|---|
git init |
初始化一个空仓库 |
git clone |
将远程仓库克隆到本地 |
一个简单的操作例子:
$ git init # 初始化,将产生一个隐藏目录 .git
$ git add . # 添加修改的文件到暂存区
$ git commit -m "add" # 将暂存区内的文件提交到本地仓库
或者通过克隆远程仓库来创建:
# git clone
$ git clone https://github.com/user/repo Repo
Order | Introduction |
---|---|
git add |
添加文件到暂存区 |
git status |
检查本地仓库的状态 |
git diff |
比较暂存区和版本库的差异 |
git commit |
将暂存区内文件推送到本地仓库 |
git reset |
回退版本 |
git rm |
删除工作区的文件 |
git mv |
移动或重命名工作区的文件 |
添加文件到暂存区:
$ git add [file1] [file2] ... # 添加一个或多个文件
$ git add [dir] # 添加一个目录
$ git add . # 添加所有文件
展示状态:
status: A 表示已添加到暂存区;AM 表示暂存区内存在文件但已修改; U 表示未添加到暂存区
$ git status # 详细地展示
$ git status -s # 简洁地展示
显示暂存区文件与工作区内修改但未提交到暂存区的文件之间的差异:
$ git diff [file] # 展示差异
$ git diff --cached [file] # 显示暂存区与上次commit的差异
$ git diff --stat [file] # 简洁地展示差异
$ git diff HEAD # 展示所有修改
删除文件:
$ git rm <file> # 同时删除暂存区和工作区的文件
$ git rm -f <file> # 强制删除暂存区内修改过但未提交的文件
$ git rm --cached <file> # 从暂存区内删除但保留工作区内的文件
提交暂存区内的文件到本地仓库:
$ git commit -m [message] # message 为 commit 的备注信息
$ git commit [file1] [file2] ... -m [message]
回退版本:
git reset
的语法:
$ git reset [--soft | --mixed | --hard] [HEAD]
--mixed
为默认值,作用是让暂存区内的文件与上次 commit 保持一致。
这里给出 HEAD 的含义:
版本指版本库,一般 commit 之后产生新版本
$ git reset HEAD^ # 回退所有内容到上一版本
$ git reset HEAD^ <fileName> # 回退特定文件
$ git reset --soft <HEAD> # 回退到某一版本
$ git reset --hard <HEAD> # 将包含未 commit 的文件的所有文件回退到某一版本
$ git reset --hard origin/master # 回退版本某一分支直到与远程仓库一致
Order | Introduction |
---|---|
git remote |
远程操作 |
git fetch |
抓取远程仓库的文件 |
git pull |
下载远程文件并合并 |
git push |
向远程仓库上传文件并合并 |
远程操作:
$ git remote -v # 显示所有远程仓库
$ git remote rm <name> # 删除远程仓库文件
$ git remote rename <oldName> <newName> # 修改远程仓库名称
下载远程仓库并合并:
$ git fetch
$ git merge
等同于:
$ git pull <远程仓库名称> <远程分支>:<本地分支> # 参数可省略
git pull
会将远程仓库的文件拉取到本地的工作区,而不是直接拉取到本地仓库中。因此在执行完该命令后,还需执行 add
、commit
等命令。
上传:
$ git push origin master # 将本地分支 master 推送到远程仓库分支 master
git clone https://github.com/{username}/Repo RepoName
git rm
git commit -m "uploadInfo"
git checkout .
将工作区内的所有文件替换成暂存区内的文件git reset HEAD .
撤销暂存区的所有修改至工作区,接下来就回到了上一步。git reset --hard HRAD^
将所有文件回退至上一版本。git push origin main
在下面操作中,请格外注意他人的仓库和自己 fork 得到的仓库的区别!
1. fork
首先在 GitHub/Gitee 上 fork 他人的仓库
2. 克隆到本地
将 fork 到自己账号的仓库,克隆到本地。注意是自己通过 fork 获得的仓库。
git clone [email protected]:username/repo.git
3. 与他人的仓库建立关系
使用 git remote -v
查看一下当前的远程链接情况,会发现:
origin [email protected]:username/repo.git (fetch)
origin [email protected]:username/repo.git (push)
本地仓库并没有与他人的仓库形成联系,而只有到自己仓库的关系流。接下来使用命令,建立联系:
git remote add upstream https://github.com/OtherUser/repo.git
然后查看远程链接,出现下面情况则表示已建立联系。
origin [email protected]:xxxx (fetch)
origin [email protected]:xxxx (push)
upstream https://github.com/yyyy (fetch)
upstream https://github.com/yyyy (push)
4. 新建分支并拉取最新内容
首先,新建并切换到新建的分支:
git checkout -b myBranch
无论是第二天准备开始编辑,还是要提 PR 前,都需要将远程仓库的 master 同步到自己的分支来。如果遇到合并冲突,需要查看冲突文件,手动修改解决。
首先拉取 master 分支的最新内容,再切换回自己的分支:
git checkout master
git pull upstream master
git checkout myBranch
接着将 master 的最新内容同步到自己的分支上:
git rebase -i upstream/master
该过程如果出现冲突的话,需要通过 git status
来查看冲突文件,手动编辑修改后,用 git add
添加,之后通过 git rebase --continue
来完成中断的 rebase 操作。
遇到合并冲突的问题,基本都需要类似的操作
5. 修改并提交到自己的仓库
然后,在新建的分支中编辑,比如新建文件、编辑文件等等。最后使用 git add, commit, push
等操作,将文件提交到自己的仓库。注意,一定是自己的仓库!
6. 发起 PR (Pull Request)
首先到自己的仓库,点击 Pull Requests,再点击 New pull requests;接着会进入 Comparing changes 界面,需要的话可以检查一下修改的地方,保证准确性;最后填写相关信息,再点击 Create pull request 即可。
最后合并 (Merge) 就是仓库作者的事了。