参考视频:16-git的日志以及版本管理_哔哩哔哩_bilibili
参考博客:Git && Docker 学习笔记-CSDN博客
目录
简介
个人操作初始化
初始化git目录
查看生成的git目录文件
配置git工作目录的用户信息
查看工作区的状态,生成文件的状态
添加文件到暂存区、仓库区
仓库区的版本回退和恢复
暂存区回退到工作区
工作区及暂存区修改的撤销
远程仓库克隆到本地初始化
远程仓库的文件创建与上传及信息查询
Git 多人操作
多人协助冲突的发生及解决
标签
分支操作
简介
当前最先进的分布式版本控制系统,作用于源代码管理,方便多人协同开发,便于版本控制
个人操作初始化
初始化git目录
git init
root@pass:/home/pass/Desktop/mytest# git init 初始化目录生成 .git目录
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
Initialized empty Git repository in /home/pass/Desktop/mytest/.git/
查看生成的git目录文件
ll 查看隐藏目录命令
root@pass:/home/pass/Desktop/mytest# ll 查看隐藏目录命令ll
total 12
drwxr-xr-x 3 root root 4096 3月 1 20:00 ./
drwxr-xr-x 4 pass pass 4096 3月 1 20:00 ../
drwxr-xr-x 7 root root 4096 3月 1 20:00 .git/ 以点开头的目录系统不可见
root@pass:/home/pass/Desktop/mytest# cd .git/
root@pass:/home/pass/Desktop/mytest/.git# ls
branches config description HEAD hooks info objects refs
配置git工作目录的用户信息
git config user.name pass 用户姓名
git config user.email pass@qq.com 用户邮件
root@pass:/home/pass/Desktop/mytest/.git# git config user.name pass 用户姓名
root@pass:/home/pass/Desktop/mytest/.git# git config user.email pass@qq.com 用户邮件
root@pass:/home/pass/Desktop/mytest/.git# cat config 查看用户信息
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[user]
name = pass
email = pass@qq.com
查看工作区的状态,生成文件的状态
git status 查看当前状态
root@pass:/home/pass/Desktop/mytest# git status 查看当前状态
On branch masterNo commits yet
nothing to commit (create/copy files and use "git add" to track)
root@pass:/home/pass/Desktop/mytest# touch file 工作区创建文件
root@pass:/home/pass/Desktop/mytest# git status
On branch masterNo commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
filenothing added to commit but untracked files present (use "git add" to track)
添加文件到暂存区、仓库区
git add file 添加文件file到暂存区 "."当前全部文件
git commit -m 'first commit' 提交到仓库[参数-m 备注信息]
git log 查看提交日志
root@pass:/home/pass/Desktop/mytest# git add file 添加文件file 到暂存区"."当前全部文件
root@pass:/home/pass/Desktop/mytest# git status 查看当前状态
On branch masterNo commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: fileUntracked files:
(use "git add <file>..." to include in what will be committed)
meroot@pass:/home/pass/Desktop/mytest# git commit -m 'first commit' 提交到仓库[-m 备注]
[master (root-commit) 474ca08] first commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file
root@pass:/home/pass/Desktop/mytest# git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
menothing added to commit but untracked files present (use "git add" to track)
root@pass:/home/pass/Desktop/mytest# git log 查看日志
commit 474ca0871818584972749d6b84d2d814825d8b2f (HEAD -> master)
Author: pass <pass@qq.com>
Date: Fri Mar 1 20:08:06 2024 +0800first commit
仓库区的版本回退和恢复
回退版本
- HEAD 当前最新版本
- HEAD^ 当前最新版本的前一个版本
- HEAD^^ 当前最新版本的前两个版本,依次类推
- HEAD~1 当前最新版本的前一个版本
- HEAD~10 当前版本的前10个版本,依次类推
eg:
git reset --hard HEAD~ 回退到上一个版本
git reset --hard 版本号 回退到指定的版本
git reflog 查看所有的版本记录
root@pass:/home/pass/Desktop/mytest# git reflog 查看所有的版本记录
c9097f1 (HEAD -> master) HEAD@{0}: commit: second commit
474ca08 HEAD@{1}: commit (initial): first commit
root@pass:/home/pass/Desktop/mytest# git reset --hard HEAD^ 回退到上一版本
HEAD is now at 474ca08 first commit
root@pass:/home/pass/Desktop/mytest# git log 查看提交的日志
commit 474ca0871818584972749d6b84d2d814825d8b2f (HEAD -> master)
Author: pass <pass@qq.com>
Date: Fri Mar 1 20:08:06 2024 +0800first commit
root@pass:/home/pass/Desktop/mytest# git reflog
474ca08 (HEAD -> master) HEAD@{0}: reset: moving to HEAD^
c9097f1 HEAD@{1}: commit: second commit
474ca08 (HEAD -> master) HEAD@{2}: commit (initial): first commit
root@pass:/home/pass/Desktop/mytest# git reset --hard c9097f1 回退到第二个版本
HEAD is now at c9097f1 second commit
暂存区回退到工作区
git reset HEAD [file]
root@pass:/home/pass/Desktop/mytest# git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: learn.txt
new file: meroot@pass:/home/pass/Desktop/mytest# git reset HEAD learn.txt
root@pass:/home/pass/Desktop/mytest# git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: meUntracked files:
(use "git add <file>..." to include in what will be committed)
learn.txt
工作区及暂存区修改的撤销
git checkout learn.txt 撤销工作区及暂存区的修改
root@pass:/home/pass/Desktop/mytest# git status 暂存区的文件learn.txt
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: learn.txt
new file: meroot@pass:/home/pass/Desktop/mytest# echo 888 >> learn.txt 修改工作区的文件
root@pass:/home/pass/Desktop/mytest# cat learn.txt
666
999
888
root@pass:/home/pass/Desktop/mytest# git checkout learn.txt 撤销工作区及暂存区的修改
Updated 1 path from the index
root@pass:/home/pass/Desktop/mytest# cat learn.txt
666
999
远程仓库克隆到本地初始化
git clone git@github.com:past-plus/learn_test.git
root@pass:/home/pass/remote_learn# git clone git@github.com:past-plus/learn_test.git
Cloning into 'learn_test'... 克隆远程仓库到本地
warning: You appear to have cloned an empty repository.
root@pass:/home/pass/remote_learn# cd learn_test/
root@pass:/home/pass/remote_learn/learn_test# ll
total 12
drwxr-xr-x 3 root root 4096 3月 1 21:24 ./
drwxr-xr-x 3 root root 4096 3月 1 21:24 ../
drwxr-xr-x 7 root root 4096 3月 1 21:24 .git/
root@pass:/home/pass/remote_learn/learn_test# cd .git/
root@pass:/home/pass/remote_learn/learn_test/.git# ls 远程仓库的git配置
branches config description HEAD hooks info objects refs
root@pass:/home/pass/remote_learn/learn_test/.git# cat config 远程仓库的配置信息
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@github.com:past-plus/learn_test.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
remote = origin
merge = refs/heads/main
root@pass:/home/pass/remote_learn/learn_test# git config user.name pass 配置用户信息
root@pass:/home/pass/remote_learn/learn_test# git config user.eamil pass@qq.com
远程仓库的文件创建与上传及信息查询
git add . 提交到暂存区
git status 查看当前状态
git commit -m 'test and learn' 提交到仓库
git push 上传到远程仓库
root@pass:/home/pass/remote_learn/learn_test# touch test.py learn.py 创建文件
root@pass:/home/pass/remote_learn/learn_test# git add . 提交到暂存区
root@pass:/home/pass/remote_learn/learn_test# git status 查看当前状态
On branch mainNo commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: learn.py
new file: test.pyroot@pass:/home/pass/remote_learn/learn_test# git commit -m 'test and learn' 提交到仓库
[main (root-commit) b7588d1] test and learn
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 learn.py
create mode 100644 test.py
root@pass:/home/pass/remote_learn/learn_test# git push 上传到远程仓库
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 232 bytes | 232.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:past-plus/learn_test.git
* [new branch] main -> main
root@pass:/home/pass/remote_learn/learn_test# vim test.py 更新文件信息,需要再次上传
root@pass:/home/pass/remote_learn/learn_test# git commit -m 'test modified'
On branch main
Your branch is up to date with 'origin/main'.Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: test.pyno changes added to commit (use "git add" and/or "git commit -a")
root@pass:/home/pass/remote_learn/learn_test# git add .
root@pass:/home/pass/remote_learn/learn_test# git commit -m 'test modified'
[main 9d0f8f9] test modified
1 file changed, 2 insertions(+)
root@pass:/home/pass/remote_learn/learn_test# git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)nothing to commit, working tree clean
root@pass:/home/pass/remote_learn/learn_test# git log 查看提交日志
commit 9d0f8f9b493856ec917edd67807ad0676e12da9a (HEAD -> main)
Author: pass <10752095+past_pass@user.noreply.gitee.com>
Date: Fri Mar 1 21:35:20 2024 +0800test modified
commit b7588d1d98bf2a1287904610bff4d92397393440 (origin/main)
Author: pass <10752095+past_pass@user.noreply.gitee.com>
Date: Fri Mar 1 21:30:52 2024 +0800test and learn
root@pass:/home/pass/remote_learn/learn_test# git reflog 查看历史版本
9d0f8f9 (HEAD -> main) HEAD@{0}: commit: test modified
b7588d1 (origin/main) HEAD@{1}: commit (initial): test and learn
root@pass:/home/pass/remote_learn/learn_test# git push 提交到远程仓库
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 303 bytes | 303.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:past-plus/learn_test.git
b7588d1..9d0f8f9 main -> main
运行结果:
Git 多人操作
git commit -am 'xxxx' 参数a 表示add添加到暂存区
git pull 拉取远程仓库到工作区
员工a的操作
root@pass:/home/pass/gitee_test/test_a# git config user.name 'a' 配置用户信息
root@pass:/home/pass/gitee_test/test_a# git config user.name 'a@qq.com'
root@pass:/home/pass/gitee_test/test_a# touch test.py
root@pass:/home/pass/gitee_test/test_a# git add .
root@pass:/home/pass/gitee_test/test_a# git statusroot@pass:/home/pass/gitee_test/test_a# git commit -m 'test commit first' 提交到仓库
[master (root-commit) 7bc421c] test commit first
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test.py
root@pass:/home/pass/gitee_test/test_a# git push 上传到远程仓库
Username for 'https://gitee.com': past_pass
Password for 'https://past_pass@gitee.com':
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 226 bytes | 226.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To https://gitee.com/past_pass/test.git
* [new branch] master -> master员工b
root@pass:/home/pass/gitee_test/test_b# git config user.name 'b'
root@pass:/home/pass/gitee_test/test_b# git config user.email 'b@qq.com'
root@pass:/home/pass/gitee_test/test_b# git pull
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 206 bytes | 206.00 KiB/s, done.
From https://gitee.com/past_pass/test
* [new branch] master -> origin/master
root@pass:/home/pass/gitee_test/test_b# ls
test.py
多人协助冲突的发生及解决
造成的原因: 多人修改同一份代码,需要先拉取最新的代码修改,否则会造成冲突
员工a
root@pass:/home/pass/gitee_test/test_a# echo 'echo "git learn"'>>learn.py
root@pass:/home/pass/gitee_test/test_a# cat learn.py
echo "learn"
echo "git learn"
root@pass:/home/pass/gitee_test/test_a# git commit -am 'update learn'
[master cda86ba] update learn
1 file changed, 1 insertion(+)
root@pass:/home/pass/gitee_test/test_a# git push员工b[没有pull拉取远程仓库的代码而是直接在本地进行修改上传造成冲突]
root@pass:/home/pass/gitee_test/test_b# cat learn.py
echo "learn"
echo "xxx"
root@pass:/home/pass/gitee_test/test_b# git commit -am 'update file'root@pass:/home/pass/gitee_test/test_b# git push
➜ git:(test) git pull origin test
* branch test -> FETCH_HEAD
hint: You have divergent branches and need to specify how to reconcile them.
hint: You can do so by running one of the following commands sometime before
hint: your next pull:
hint:
hint: git config pull.rebase false # merge (the default strategy)
hint: git config pull.rebase true # rebase
hint: git config pull.ff only # fast-forward only
hint:
hint: You can replace "git config" with "git config --global" to set a default
hint: preference for all repositories. You can also pass --rebase, --no-rebase,
hint: or --ff-only on the command line to override the configured default per
hint: invocation.
fatal: Need to specify how to reconcile divergent branches.
标签
- 当一个大版本完成之后,需要打一个标签,记录大版本备份代码
git tag -a v1.0(标签名) -m 'version1.0'(描述) 本地打标签
git push origin v1.0(标签名) 推送标签到远程仓库
root@pass:/home/pass/gitee_test/test# git commit -am 'commit learn file'
[master 62eda34] commit learn file
1 file changed, 1 insertion(+), 1 deletion(-)
root@pass:/home/pass/gitee_test/test# git tag -a v1.0 -m 'version1.0'
root@pass:/home/pass/gitee_test/test# git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Writing objects: 100% (3/3), 278 bytes | 139.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To https://gitee.com/past_pass/test.git
e1c4aef..62eda34 master -> master
root@pass:/home/pass/gitee_test/test# git push origin v1.0
运行结果:
分支操作
git branch 查看当前分支
git checkout -b test 创建并切换分支test
git checkout master 切换主分支master
git merge test 融合分支test到主支master
root@pass:/home/pass/gitee_test/test# git branch
* master
root@pass:/home/pass/gitee_test/test# git checkout -b test
Switched to a new branch 'test'
root@pass:/home/pass/gitee_test/test# git branch
master
* testroot@pass:/home/pass/gitee_test/test# git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
root@pass:/home/pass/gitee_test/test# git branch
* master
testroot@pass:/home/pass/gitee_test/test# git merge test
Already up to date.