目录
Git简介
Git 是一种开源的分布式版本控制系统。目前,较多开发人员使用其技术进行项目版本控制和协同开发等需要。Git可以做的事情如下:
- 版本控制和分支管理
- 本地仓库与原仓库提交,拉取,合并,推送
- 协同开发,整个团队中所有人都可以访问;
本文主要从实用主义角度出发,介绍Git常用命令的操作方法,暂未对其背后原理进行深入探索。
Git安装步骤
windows下Git安装:
- 在官网(Git for Windows)或者国内镜像网站(git-for-windows Mirror)下载对应版本exe文件并安装。
- 安装完成过后,可在"开始"界面中找到"Git Bash"或者"Git CMD",表明安装成功。
上述安装过程可参考:Git 详细安装教程(详解 Git 安装过程的每一个步骤)
Git常用操作
基础准备
1.安装Git后,打开Git CMD窗口,并进入工作文件夹
2.进入Github网站注册账号并登录,创建"new repository",在新建的仓库界面中点击"code",
再点击 Use HTTPS
,复制项目地址 https://github.com/Just-9ne/GitDemo.git
备用
git clone
从git服务器拉取代码并创建一个本地库。代码下载完成后在当前文件夹中会有一个
gafish.github.com
的目录,通过cd gafish.github.com
命令进入目录。
git clone https://github.com/gafish/gafish.github.com.git
git config
配置开发者的用户名和邮箱。在每次提交代码后,会产生一条包含当前配置的用户名和邮箱的提交记录。
git config --global user.name "username"
git config --global user.email "email@example.com"
git config --list
git init
初始化一个空目录,将当前所在目录初始化为git可以管理的仓库。
$ git init
Initialized empty Git repository in D:/GitDemo/.git/
git add
添加文件到暂存区。
git add README.md
注:首先需要在项目文件下新建一个README.md文件
git commit
提交文件变动到版本库。命令"git commit -m "modify info" "中-m 后面参数为本次代码提交说明
git commit -m "提交原因说明"
命令执行结果如下:
PS D:\gitdemo> git add main.cpp
PS D:\gitdemo> git commit -m "提交原因说明"
[master 28536b9] 提交原因说明
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 main.cpp
1 file changed:表示一个文件发生了改动。
0 insertions(+)和 0 deletions(-):表示文件内容未做插入和删除操作。
若提交的备注写错了,可使用以下"git commit --amend"命令进入Git默认编辑器进行修改
git commit --amend
git status
查看文件变动状态
git status
命令执行结果如下:Changes to be commited表示文件已经提交到暂存区
PS D:\gitdemo> git add camera.cpp
PS D:\gitdemo> git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: camera.cpp
git log
查看整个项目的版本提交记录。主要包括提交人、日期、提交原因等信息
git log
命令执行结果如下:
PS D:\gitdemo> git log
commit 3a44ec34ce98fd296ae4d25e533ffe48a954009a (HEAD -> master)
Author: Just-9ne <信息不放便展示@qq.com>
Date: Wed Jan 26 21:36:38 2022 +0800
<E6><8F><90><E4><BA><A4><E6><8F><8F><E8><BF><B0><E8><AF><B4><E6><98><8E>
commit 8f6adca802da31101a0f8e6aef916130ebfdc6ce
Author: Just-9ne <信息不放便展示@qq.com>
Date: Wed Jan 26 21:30:15 2022 +0800
git reset
回退历史版本
回退上一版本:在Git中,使用HEAD表示当前版本,HEAD^表示上一个版本,HEAD^^表示上上一个版本,HEAD~100表示往上100个版本。
git reset --hard HEAD^
git reset --hard HEAD^^
git reset --hard HEAD~100
回退到某一具体版本:命令git reset --hard 提交版本号 可回退到某一具体版本,其中提交版本号通过git reflog命令查询
git reflog
git reset --hard 提交版本号
命令使用案例:
PS D:\gitdemo> git reflog
3a44ec3 (HEAD -> master) HEAD@{0}: reset: moving to 3a44ec34ce98fd296ae4d25e533ffe48a954009a
28536b9 HEAD@{1}: reset: moving to HEAD^
b30be5d HEAD@{2}: commit: <E6><8F><90><E4><BA><A4><E5><8E><9F><E5>▒<A0>
28536b9 HEAD@{3}: commit: <E6><8F><90><E4><BA><A4><E5><8E><9F><E5>▒<A0><E8><AF><B4><E6><98><8E>
3a44ec3 (HEAD -> master) HEAD@{4}: commit: <E6><8F><90><E4><BA><A4><E6><8F><8F><E8><BF><B0><E8><AF><B4><E6><98><8E>
8f6adca HEAD@{5}: commit (amend): a new file
87457a2 HEAD@{6}: commit (initial): new file
PS D:\gitdemo> git reset --hard 28536b9
HEAD is now at 28536b9 提交原因说明
git remote
为远程库创建别名和查看当前所有远程地址别名
远程地址为前期基础准备阶段从Github中复制的项目地址
git remote add [别名] [远程地址]
git remote -v
使用案例:
PS D:\gitdemo> git remote add origin https://github.com/Just-9ne/GitDemo.git
PS D:\gitdemo> git remote -v
origin https://github.com/Just-9ne/GitDemo.git (fetch)
origin https://github.com/Just-9ne/GitDemo.git (push)
git push
将本地代码变动推送到远程仓库
git push [远程仓库别名] [待推送分支]
使用案例:origin
指代的是当前的Git服务器地址,这行命令的意思是把master分支推送到服务器,当看到命令行返回如下字符表示推送成功了。
PS D:\gitdemo> git push origin master
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 8 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (7/7), 640 bytes | 640.00 KiB/s, done.
Total 7 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), done.
remote:
remote: Create a pull request for 'master' on GitHub by visiting:
remote: https://github.com/Just-9ne/GitDemo/pull/new/master
remote:
To https://github.com/Just-9ne/GitDemo.git
* [new branch] master -> master
若遇到错误:remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for 'https://github.com/Just-9ne/GitDemo.git/'解决方案参考博客:【突发】解决remote: Support for password authentication was removed on August 13, 2021. Please use a perso
git pull
将服务器上最新的代码拉取到本地
git pull [远程仓库别名] [待拉取分支名]
使用案例:
PS D:\gitdemo> git pull origin master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/Just-9ne/GitDemo
* branch master -> FETCH_HEAD
28536b9..7792bcd master -> origin/master
Updating 28536b9..7792bcd
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)
进入Github网站的项目首页,再进入 master
分支,在线对 README.md
文件做一些修改并保存,然后在命令中执行以上命令,它将把刚才在线修改的部分拉取到本地,用编辑器打开 README.md
,你会发现文件已经跟线上的内容同步了。
如果线上代码做了变动,而你本地的代码也有变动,拉取的代码就有可能会跟你本地的改动冲突,一般情况下 Git
会自动处理这种冲突合并,但如果改动的是同一行,那就需要手动来合并代码,编辑文件,保存最新的改动,再通过 git add .
和 git commit -m 'xxx'
来提交合并。
git branch
通过
Git
做项目开发时,一般都是在开发分支中进行,开发完成后合并分支到主干。分支操作包括:创建、重命名、查看、删除。
分支创建:创建一个名为daily/0.0.0的日常开发分支。
git branch daily/0.0.0
分支重命名:重命名分支名为daily/0.0.1
git branch -m daily/0.0.0 daily/0.0.1
分支查看:通过不带参数的branch命令可以查看当前项目分支列表
git branch
分支删除:可以通过 -d
参数将已完成使命的分支删除
git branch -d daily/0.0.1
git checkout
切换分支
切换到daily/0.0.1分支,后续操作将在这个分支上进行。
git checkout daily/0.0.1