1、Git
Git 是一个分布式版本控制系统。其作用是对源代码进行管理,便于多人协同开发以及版本控制
几个不同的区
工作区:对于代码的添加、修改、删除文件的操作,都发生在工作区中
暂存区:暂存区指将工作区中的操作完成小阶段的存储,通过 git add . 将工作区添加到暂存区
仓库区:仓库区表示个人开发的一个小阶段的完成仓库区中记录的各版本是可以查看并回退的,暂存区的版本进行提交后自行删除。通过 git commit -m “备注” 进行提交到仓库区。
2、本地仓库操作
在本地新建一个空仓库
git init
.git是本地的一个空仓库
配置个人信息
liuju@Time MINGW64 /f/test (master)
$ git config user.name "Time"
liuju@Time MINGW64 /f/test (master)
$ git config user.email "lTimej@126.com"
在.git/config文件:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[user]
name = Time
email = lTimej@126.com
在工作区新建测试文件
liuju@Time MINGW64 /f/test (master)
$ touch demo.py
liuju@Time MINGW64 /f/test (master)
$ ls
demo.py
git status查看文件状态,文件显示颜色为红色在工作区,绿色在暂存区
$ git status
On branch master #所在分支
No commits yet #显示未提交到仓库区
Untracked files:
(use "git add <file>..." to include in what will be committed)
demo.py # 工作区
nothing added to commit but untracked files present (use "git add" to track)
git add demo.py 提交指定文件 或 git add . 提交全部文件
$ git add demo.py
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: demo.py # 暂存区
.git commit 将暂存区文件提交到仓库区
$ git commit -m "示例"
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 demo.py
$ git status
On branch master
nothing to commit, working tree clean
添加两个不同版本,两行不同记录
git log 查看版本记录
$ git log
commit 7f3a5b322531eea3b09d890f37c5834d03a31771 (HEAD -> master)
Author: Time <lTimej@126.com>
Date: Thu Sep 8 09:41:26 2022 +0800
版本二
commit 2ec0769d312bb07ae4dadb4033abddee1b96d068
Author: Time <lTimej@126.com>
Date: Thu Sep 8 09:36:22 2022 +0800
版本一
commit 5060df1ebb96f3d5771977764db4199663db4375
Author: Time <lTimej@126.com>
Date: Thu Sep 8 09:34:00 2022 +0800
示例
git reflog查看所有版本信息,包括删除的
$ git reflog
# 版本号
2ec0769 (HEAD -> master) HEAD@{0}: commit: 版本一
5060df1 HEAD@{1}: commit (initial): 示例
版本回退
# HEAD表示当前最新版本
# HEAD^表示当前最新版本的前一个版本
# HEAD^^表示当前最新版本的前两个版本,以此类推...
# HEAD~1表示当前最新版本的前一个版本
# HEAD~10表示当前最新版本的前10个版本,以此类推...
git reset --hard HEAD^ #回退到当前版本的前一个版本
# 回退到版本一了
$ git log
commit 2ec0769d312bb07ae4dadb4033abddee1b96d068 (HEAD -> master)
Author: Time <lTimej@126.com>
Date: Thu Sep 8 09:36:22 2022 +0800
版本一
commit 5060df1ebb96f3d5771977764db4199663db4375
Author: Time <lTimej@126.com>
Date: Thu Sep 8 09:34:00 2022 +0800
示例
版本二记录没了
指定版本进行回 退
$ git reflog
#版本号
2ec0769 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
7f3a5b3 HEAD@{1}: commit: 版本二
2ec0769 (HEAD -> master) HEAD@{2}: commit: 版本一
5060df1 HEAD@{3}: commit (initial): 示例
#重新回退到版本二
git reset --hard 7f3a5b3
$ git log
commit 7f3a5b322531eea3b09d890f37c5834d03a31771 (HEAD -> master)
Author: Time <lTimej@126.com>
Date: Thu Sep 8 09:41:26 2022 +0800
版本二
commit 2ec0769d312bb07ae4dadb4033abddee1b96d068
Author: Time <lTimej@126.com>
Date: Thu Sep 8 09:36:22 2022 +0800
版本一
commit 5060df1ebb96f3d5771977764db4199663db4375
Author: Time <lTimej@126.com>
Date: Thu Sep 8 09:34:00 2022 +0800
示例
版本二回来了
git checkout 文件名 撤销工作区和暂存区的数据
$ git checkout demo.py
Updated 1 path from the index
3、远程仓库操作
在github上 Create a new repository
https://github.com/lTimej/git_demo.git 远程操作
git@github.com:lTimej/git_demo.git 与Github上的仓库交互,那么就要把这台电脑的SSH公钥添加到这个Github账户上
#生成密钥
ssh-keygen -t rsa -C "lTimej@126.com"
# 将生成的公钥添加到github上 主页=》设置=》ssh and gpg keys中key中
克隆远程项目
$ git clone http://github.com/lTimej/git_demo.git
Cloning into 'git_demo'...
warning: redirecting to https://github.com/lTimej/git_demo.git/
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (5/5), 2.22 KiB | 12.00 KiB/s, done.
配置个人信息
liuju@Time MINGW64 /f/test (master)
$ git config user.name "lTimej"
liuju@Time MINGW64 /f/test (master)
$ git config user.email "lTimej@126.com"
将项目上传到远程仓库
git add demo.py
git commit -m "首次"
git push
# push过程中如果出现:fatal: Authentication failed for 'https://github.com/lTimej/git_demo.git/'
# 检查个人信息配置是否和github信息一致
# 有可能password中并不是要输入密码,而是token。去github -> setting -> developer settings -> personal access token 生成一个新的token 生成新的token,粘贴token即可。
4、代码冲突
多人同时开发时,容易出现代码冲突的情况,由于多人同时修改了同一个文件引起冲突,一旦出现代码冲突,必须先解决再做后续开发
冲突解决方法
#方式一
#获取最新代码
git fetch
#对比代码
git diff origin/main
#修改冲突地方后提交并推送代码
#方式二
#拉取并合并最新代码
git pull origin main
#查看冲突代码
git status
#修改冲突代码后提交并推送代码
5、将本地代码推到远程仓库
git init
git remote add origin 仓库地址
git pull origin master
git add .
git commit -m “提交项目”
git push origin master
6、fork同步
# 查看远程状态
git remote -v
# 添加被同步给 fork 远程的仓库
git remote add upstream 地址
# 同步
git fetch upstream
7、Git常用命令
#在本地创建一个空创库
git init
#查看所有版本信息,包括删除的
git reflog
#查看现有的版本记录
git log
#下载项目
git clone 仓库地址
#从工作区上传到暂存区
git add .
#从暂存区上传到仓库区
git commit -m "标签"
#上传至远程仓库
git push
#拉取远程某分支最新代码
git pull origin 分支
#查看分区状态
git status
#查看所有分支
git branch
#创建新的分支
git branch 分支名
#创建新的分支,并切换到新分支
git checkout -b 分支名
#切换分支
git checkout 分支名
#将分支推到远程
git push -u origin 分支名
#基于某远程分支创建分支,并切换至该分支内
git checkout -b 分支名 dev
#删除分支
git branch -d 分支名
#将某分支合并到当前分支
git merge 分支名
#打Tag以方便跟踪
git tag -a 标签名 -m "提示"
#将标签推到远程
git push origin 标签名
#删除本地tag
git tag -d 标签名
#删除远程tag
git push --delete origin 标签名
# 删除远程分支
git push origin --delete [branch_name]
#查看git所有配置
git config --list
#个人信息配置
git config user.name 名
git config user.email 邮箱
#修改git全局信息
git config --global user.email 新邮箱