这么多年一直用vss /svn 想研究一下git ,问一个同事,结果像是喂他吃了苍蝇一样,算了,自己研究一下,能有啥的。研究结果push 给大家分享。
网上p~iao了些同仁的资料,学习测试研究过程记录给大家,供大家参考。
我使用的远程库是 gitee 库,其他库大同小异,以后用到在研究
git config --global user.name "xxx"
git config --global user.email "[email protected]"
其中, --global 指定为全局配置,不使用该参数,则为当前所在仓库配置。
git init
touch README.md
或
vi README.md
也可以使用本地编辑器进行创建编辑
vi READMIN.md 也可以本地文本编辑器编辑
vi .gitignore
window系统创建这个文件有点费劲,使用vi比较方便
git add . //当前文件夹下的编辑文件全部提交到缓存区,语法同unix 的语法
或
git add 文件名/文件夹 //指定文件夹或文件提交至缓存区
git commit // 会弹出描述编辑器,编写描述
或
git commit -m "描述内容" //带描述提交,一般使用这种方式
可以查看目前各个库的状态,以判断我们是否需要提交等动作
git status
示例:
$ git status
On branch master
nothing to commit, working tree clean
示例2:
$ git status
On branch master
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git restore ..." to discard changes in working directory)
modified: README.md
no changes added to commit (use "git add" and/or "git commit -a")
git diff // 查看版本库中所有的改动
或
git diff 文件 // 查看具体文件的改动
示例1:
$ git diff
diff --git a/README.md b/README.md
index e69de29..7e37670 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1,2 @@
+测试修改
+
示例2:
$ git diff README.md
diff --git a/README.md b/README.md
index e69de29..7e37670 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1,2 @@
+测试修改
+
在 git log 的输出内容中,可以看到每次提交的 ID,是一个 40 位的字符串
git log // 显示所有提交的历史记录
git log --pretty=oneline // 单行显示提交历史记录的内容
示例:
$ git log
commit af668c47df700ff923b12222a227dec9227bf3ba (HEAD -> master, origin/master)
Author: wangwj
Date: Wed Jun 29 12:59:07 2022 +0800
test01
commit 805bcd94e76bfbffba91132998c2353c7d7e5efe
Author: wangwj
Date: Wed Jun 29 12:04:44 2022 +0800
test
示例2
$ git log --pretty=oneline
af668c47df700ff923b12222a227dec9227bf3ba (HEAD -> master, origin/master) test01
805bcd94e76bfbffba91132998c2353c7d7e5efe test
通过 git log 来查看提交的历史记录,就可以通过 git reset --hard来回退到我们需要的特定版本,然后使用当时的代码进行各种操作。
git reset --hard HEAD^ // 回退到上一个提交版本
git reset --hard HEAD^^ // 回退到上上一个提交版本
git reset --hard 'commit_id' // 会退到 commit_id 指定的提交版本
--hard 参数表明后续的修改都将被丢弃,去掉hard ,则后续的修改标记为未提交,后续如果要丢弃,按照放弃修改操作。
示例:
$ git log --pretty=oneline
18d76242414ce910bb2014baa65e6d209b0191ba (HEAD -> master, origin/master) 0004
569ce9c6244822c22952ba423a2f8e0bcd0abf3a 0003
103ac1bdeeda3603d39a06339891d257994e3fba 0002
d4676896b68564cd1a38468e040aade22934c504 0001
2a7818d1780a59bb5b7b1b1f90756b145b747d5e null
f801e0c55aaa89b108b3c5dff10d6fea7e4986e1 test0001
43e9c74ef689e400c1cc3715ac4c23c959d2c892 test04
4201c1e2146076a57f78c4acc0b9c3988854d1de test03
af668c47df700ff923b12222a227dec9227bf3ba test01
805bcd94e76bfbffba91132998c2353c7d7e5efe test
回退上一个版本
$ git reset --hard HEAD^
HEAD is now at 569ce9c 0003
提交提交历史0004 被清掉
$ git log --pretty=oneline
569ce9c6244822c22952ba423a2f8e0bcd0abf3a (HEAD -> master) 0003
103ac1bdeeda3603d39a06339891d257994e3fba 0002
d4676896b68564cd1a38468e040aade22934c504 0001
2a7818d1780a59bb5b7b1b1f90756b145b747d5e null
f801e0c55aaa89b108b3c5dff10d6fea7e4986e1 test0001
43e9c74ef689e400c1cc3715ac4c23c959d2c892 test04
4201c1e2146076a57f78c4acc0b9c3988854d1de test03
af668c47df700ff923b12222a227dec9227bf3ba test01
805bcd94e76bfbffba91132998c2353c7d7e5efe test
退回到上上个版本
$ git reset --hard HEAD^^
HEAD is now at d467689 0001
wangwj3@wangwj3 MINGW64 /d/test2 (master)
$ git log --pretty=oneline
d4676896b68564cd1a38468e040aade22934c504 (HEAD -> master) 0001
2a7818d1780a59bb5b7b1b1f90756b145b747d5e null
f801e0c55aaa89b108b3c5dff10d6fea7e4986e1 test0001
43e9c74ef689e400c1cc3715ac4c23c959d2c892 test04
4201c1e2146076a57f78c4acc0b9c3988854d1de test03
af668c47df700ff923b12222a227dec9227bf3ba test01
805bcd94e76bfbffba91132998c2353c7d7e5efe test
回到指定版本
$ git reset --hard "805bcd94e76bfbffba91132998c2353c7d7e5efe"
HEAD is now at 805bcd9 test
wangwj3@wangwj3 MINGW64 /d/test2 (master)
$ git log --pretty=oneline
805bcd94e76bfbffba91132998c2353c7d7e5efe (HEAD -> master) test
当退回到某个提交的版本以后,再通过 git log 是无法显示在这之后的提交信息的。只能通过 git_reflog 查看历史的提交回退记录
git reflog
示例:
$ git reflog
805bcd9 (HEAD -> master) HEAD@{0}: reset: moving to 805bcd94e76bfbffba91132998c2353c7d7e5efe
d467689 HEAD@{1}: reset: moving to HEAD^^
569ce9c HEAD@{2}: reset: moving to HEAD^
18d7624 (origin/master) HEAD@{3}: pull origin master: Fast-forward
569ce9c HEAD@{4}: reset: moving to HEAD^
18d7624 (origin/master) HEAD@{5}: commit: 0004
569ce9c HEAD@{6}: commit: 0003
103ac1b HEAD@{7}: commit: 0002
d467689 HEAD@{8}: commit: 0001
2a7818d HEAD@{9}: commit (merge): null
f801e0c HEAD@{10}: commit: test0001
805bcd9 (HEAD -> master) HEAD@{11}: reset: moving to HEAD^^
4201c1e HEAD@{12}: reset: moving to HEAD^
43e9c74 HEAD@{13}: commit: test04
4201c1e HEAD@{14}: commit: test03
af668c4 HEAD@{15}: commit: test01
805bcd9 (HEAD -> master) HEAD@{16}: initial pull
通过git reflog 查找reset 过程进行恢复,仍然使用 git reset --hard 进行切换
git reset --hard 'commit_id' // --hard 后续的修改都被丢弃
git reset --keep "commit id" //如果提交后有修改的内容,则不会恢复,修改的内容将被保留,不建议使用
git reset //回复至上一次提交版本
示例:
查看历史回退记录
$ git reflog
805bcd9 (HEAD -> master) HEAD@{0}: reset: moving to 805bcd94e76bfbffba91132998c2353c7d7e5efe
d467689 HEAD@{1}: reset: moving to HEAD^^
569ce9c HEAD@{2}: reset: moving to HEAD^
18d7624 (origin/master) HEAD@{3}: pull origin master: Fast-forward
569ce9c HEAD@{4}: reset: moving to HEAD^
18d7624 (origin/master) HEAD@{5}: commit: 0004
569ce9c HEAD@{6}: commit: 0003
103ac1b HEAD@{7}: commit: 0002
d467689 HEAD@{8}: commit: 0001
2a7818d HEAD@{9}: commit (merge): null
f801e0c HEAD@{10}: commit: test0001
805bcd9 (HEAD -> master) HEAD@{11}: reset: moving to HEAD^^
4201c1e HEAD@{12}: reset: moving to HEAD^
43e9c74 HEAD@{13}: commit: test04
4201c1e HEAD@{14}: commit: test03
af668c4 HEAD@{15}: commit: test01
805bcd9 (HEAD -> master) HEAD@{16}: initial pull
回退到0003 的修改
$ git reset --hard "569ce9c"
HEAD is now at 569ce9c 0003
放弃修改有两种情况,一种在工作空间,一种进入缓存区(git add 命令后),commit后已经进入本地库,通过版本恢复。
git checkout -- README.md // 如果 Readme.md 文件在工作区,则丢弃其修改
git checkout -- . // 丢弃当前目录下所有工作区中文件的修改
示例:
$ git status
On branch master
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
(use "git pull" to update your local branch)
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git restore ..." to discard changes in working directory)
modified: README.md
no changes added to commit (use "git add" and/or "git commit -a")
$ git checkout -- README.md
此时再查看 README.md文档,文档内容已经恢复到原状态
只是 git add 的逆向操作,从缓存中库中丢弃修改(工作区的修改还在),如果要完整恢复,就需要结合 git checkout – 撤回本地修改命令才行。如果已提交commit ,需要恢复版本。
git reset HEAD README.md // 将 README.md 恢复到提交缓存修改前
git reset HEAD . //撤回当前文件夹的所有提交缓存的修改
git reset HEAD //撤回到上次执行 add 命令之前
示例:
$ git status
On branch master
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
(use "git pull" to update your local branch)
Changes to be committed:
(use "git restore --staged ..." to unstage)
modified: README.md
//恢复
$ git reset HEAD README.md
Unstaged changes after reset:
M README.md
$ git status
On branch master
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
(use "git pull" to update your local branch)
Changes to be committed:
(use "git restore --staged ..." to unstage)
new file: README.md.bak
//只是撤回了提交到缓存的动作
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git restore ..." to discard changes in working directory)
modified: README.md
//撤回本地库修改才能真正的恢复
$ git checkout -- README.md
wangwj3@wangwj3 MINGW64 /d/test2 (master)
$ git status
On branch master
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
(use "git pull" to update your local branch)
Changes to be committed:
(use "git restore --staged ..." to unstage)
new file: README.md.bak
在没进入缓存之前,文件可以直接进行删除;
如果进入缓存 ,可以使用 git reset HEAD 命令撤回,然后执行没进入缓存前的的做法;
如果已经提交,则使用 git rm 进行删除;
git rm README.md.bak // 删除已经被提交过的 README.md.bak
示例:
$ git add . //加载到缓存区
$ git status
On branch master
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
(use "git pull" to update your local branch)
Changes to be committed:
(use "git restore --staged ..." to unstage)
new file: README.md.bak
$ git commit -m "测试文件删除" //提交到版本库
[master f82b372] 测试文件删除
1 file changed, 1 insertion(+)
create mode 100644 README.md.bak
$ ls -l
total 2
-rw-r--r-- 1 wangwj3 1049089 84 Jun 29 14:19 README.md
-rw-r--r-- 1 wangwj3 1049089 26 Jun 29 14:07 README.md.bak
$ git rm README.md.bak //删除版本库文件
rm 'README.md.bak'
$ ls -l
total 1
-rw-r--r-- 1 wangwj3 1049089 84 Jun 29 14:19 README.md
示例2:
wangwj3@wangwj3 MINGW64 /d/test2 (master)
$ ls
README.md README.md.bak
wangwj3@wangwj3 MINGW64 /d/test2 (master)
$ rm -rf README.md.bak
wangwj3@wangwj3 MINGW64 /d/test2 (master)
$ ls -l
total 1
-rw-r--r-- 1 wangwj3 1049089 85 Jun 29 14:39 README.md
wangwj3@wangwj3 MINGW64 /d/test2 (master)
$ git add .
wangwj3@wangwj3 MINGW64 /d/test2 (master)
$ git status
On branch master
Your branch and 'origin/master' have diverged,
and have 2 and 1 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
Changes to be committed:
(use "git restore --staged ..." to unstage)
deleted: README.md.bak
wangwj3@wangwj3 MINGW64 /d/test2 (master)
$ git commit -m "deleted"
[master 82494f8] deleted
1 file changed, 17 deletions(-)
delete mode 100644 README.md.bak
wangwj3@wangwj3 MINGW64 /d/test2 (master)
保存的文件未告诉git 进行管理,则通过多个分支创建的文件,使用git add . 命令,最终会把未跟踪的文件加载到当前分支中。所以建议在分支内的修改,在已经确定修改了,在当前分支内 加载到缓存区,然后使用保存草稿 git stash ,进行保存。
当前分支 前带星号
git branch // 查看本地分支信息
git branch -v // 查看相对详细的本地分支信息
git branch -av // 查看包括远程仓库在内的分支信息
示例1:
$ git branch
* master //当前分支 前带星号
示例2
$ git branch -v
* master 82494f8 [ahead 3, behind 1] deleted
示例3
$ git branch -av
* master 82494f8 [ahead 3, behind 1] deleted
remotes/origin/master 18d7624 0004 //远程仓库分支版本信息
一般用于对源码暂时不动,进行逻辑调整,bug测试等等,确定没问题后在合并到主枝上
注:目前在再哪个分支下创建新的分支,则复制当前分支到目标分支
git branch test01 // 新建一个名称为 test01 的分支
示例:
$ git branch test01
xxx@xxx MINGW64 /d/test2 (master)
$ git branch
* master
test01
xxx@xxx MINGW64 /d/test2 (master)
$ git branch -av
* master 82494f8 [ahead 3, behind 1] deleted
test01 82494f8 deleted // todo 研究一下意思
remotes/origin/master 18d7624 0004
创建完分支后,要切换到目标分支,否则任何修改都在原来的枝条上
git checkout test01 // 新建完 test01 分支以后,通过该命令切换到 test01 分支
示例:
$ git checkout test01
Switched to branch 'test01'
xxx@xxx MINGW64 /d/test2 (test01)
$ git branch
master
* test01 //已经切换到test01 分支
一般情况创建分支直接切换到分支上,而不需要先创建,在切换,集合了
git checkout -b test02 // 新建 test02 分支,并切换到该分支上
示例:
$ git checkout -b test02
Switched to a new branch 'test02'
xxx@xxx MINGW64 /d/test2 (test02)
$ git branch
master
test01
* test02
当修复或调整完成,我们需要将新的内容合并到主枝上,需要分两个步骤,先切回主枝,在将分支向主枝合并。注意有可能会引起冲突
git checkout master // 切换回 master 分支
git merge test01 // 将 test01 分支的修改合并回 master 主枝
示例:
$ git checkout master
Switched to branch 'master'
M README.md
Your branch and 'origin/master' have diverged,
and have 3 and 1 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
xxx@xxx MINGW64 /d/test2 (master)
$ git merge test02
Already up to date.
当分支使用完成后,可以删除分支
git branch -d test02 // 删除 test02 分支
示例:
$ git branch
* master
test01
test02
xxx@xxx MINGW64 /d/test2 (master)
$ git branch -d test02
Deleted branch test02 (was 82494f8).
xxx@xxx MINGW64 /d/test2 (master)
$ git branch
* master
test01
有时,我们需要在同一个项目的不同分支上工作。当需要切换分支时,偏偏本地的工作还没有完成,此时,提交修改显得不严谨,但是不提交代码又无法切换分支。这时,你可以使用 git stash 将本地的修改内容作为草稿储藏起来。
前提是告诉库要跟踪,但是还没决定提交的情况下暂存
git stash
示例:
$ git add br02_stash.txt
warning: LF will be replaced by CRLF in br02_stash.txt.
The file will have its original line endings in your working directory
xxx@xxx MINGW64 ~/Desktop/tst (br02)
$ git stash
Saved working directory and index state WIP on br02: cf1fe4b 都提交 //提示 保存工作,在上[cf1fe4b 都提交]之后的修改
xxx@xxx MINGW64 ~/Desktop/tst (br02)
$ git status
On branch br02
Your branch is up to date with 'origin/br02'.
nothing to commit, working tree clean
示例2:
为让git 管理的文件,临时保存不起作用,只是在本地保存了个文件
xxx@xxx MINGW64 ~/Desktop/tst (br02)
$ vi br02_stsh02.txt
xxx@xxx MINGW64 ~/Desktop/tst (br02)
$ git stash
No local changes to save
xxx@xxx MINGW64 ~/Desktop/tst (br02)
$ git status
On branch br02
Your branch is up to date with 'origin/br02'.
Untracked files:
(use "git add ..." to include in what will be committed)
br02_stsh02.txt
nothing added to commit but untracked files present (use "git add" to track)
git stash list
示例:
$ git stash list
stash@{0}: WIP on br02: cf1fe4b 都提交
git stash drop stash@{0}
示例:
xxx@xxx MINGW64 ~/Desktop/tst (br02)
$ git stash drop stash@{0}
Dropped stash@{0} (19f81c294d1b7041720e063ed1132bea70fa93f6)
git stash clear
git stash apply stash@{0}
本地库和远程库关联存在三种场景
mkdir harmony-learn
cd harmony-learn
git init
git remote add origin https://gitee.com/w-wanjin/harmony-learn.git //远程库https链接或其他类型链接
拉取远程项目到本地
如果本地没有内容,拉取一个远程仓库本地编辑
git pull origin master # 拉取远程库 master 分支
手工创建远程库
最好不好初始化!!
为本地库和远程库建立联系
git remote add origin https://gitee.com/w-wanjin/harmony-learn.git //远程库https链接或其他类型链接
如果远程库已经创建readme 文件,进行了初始化,需要先进性pull 然后才能将本地代码提交到远程仓,如果没有初始化,可以忽略,出现冲突,按照冲突解决方法进行处理
git pull origin master # 拉取远程库 master 分支
第一次提交时要带上 -u 参数(不带好像也没设么影响),在将本地的 master 分支推送到远程新的 master 分支的同时,还会把本地的 master 分支和远程的 master 分支关联起来。
git push -u origin “master” // 第一次推送时使用
git push origin “master” // 将本地 master 分支推送到 origin 远程分支
一般不会有这种情况,出现的基本上是因为都是初始化了,要么重建一端再关联,要么强行合并两个独立的仓库历史
git remote add origin https://gitee.com/w-wanjin/harmony-learn.git //远程库https链接或其他类型链接
git pull origin master --allow-unrelated-histories (该选项可以合并两个独立启动仓库的历史)
第一次提交时要带上 -u 参数(不带好像也没设么影响),在将本地的 master 分支推送到远程新的 master 分支的同时,还会把本地的 master 分支和远程的 master 分支关联起来。
git push -u origin “master” // 第一次推送时使用
git push origin “master” // 将本地 master 分支推送到 origin 远程分支
git fetch origin master
git merge origin/master 合并修改
git pull origin master
git fetch 和 git pull 之间的区别:
示例1:
xxx@xxx MINGW64 /d/test02 (master)
$ cat README.md
remote repository tst!!
xxx@xxx MINGW64 /d/test02 (master)
$ git fetch origin master
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), 333 bytes | 22.00 KiB/s, done.
From https://gitee.com/w-wanjin/harmony-learn
* branch master -> FETCH_HEAD
7f30fba..9e27c5e master -> origin/master //表明更新已经获取到
xxx@xxx MINGW64 /d/test02 (master)
$ cat README.md
remote repository tst!!
$ git merge origin/master //使用合并命令执行合并
Updating 7f30fba..9e27c5e
Fast-forward
.gitignore | 2 ++
README.md | 2 ++
2 files changed, 4 insertions(+)
create mode 100644 .gitignore
xxx@xxx MINGW64 /d/test02 (master)
$ cat README.md
remote repository tst!!
test update ! //内容更新进来了
git remote
示例:
xxx@xxx MINGW64 /d/test02 (master)
$ git remote
origin
xxx@xxx MINGW64 /d/test02 (master)
$ git remote -v
origin https://gitee.com/w-wanjin/harmony-learn.git (fetch)
origin https://gitee.com/w-wanjin/harmony-learn.git (push)
远程库迁移等情况,需要切换远程库地址
git remote set-url origin url
git checkout -b origin/the_branch
在本地仓库中的分支和远程仓库中的分支是对应的。一般情况下,远程仓库中的分支名称和本地仓库中的分支名称是一致的。
有的时候,我们会需要指定本地分支与远程分支的关联。
如果 本地分支已经有文件,需要先 pull 然后在关联
git branch --set-upstream-to=远程连接名/远程分支的名字 本地分支的名字
git branch --set-upstream 本地分支名字 远程连接名/远程分支名字 //新版本可能已经不在支持,会有如下提示:
$ git branch --set-upstream br01 origin/br01
fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
根据提示改写即可,
git branch --track br01 origin/br01
示例:
$ git checkout br01
Switched to a new branch 'br01'
Branch 'br01' set up to track remote branch 'br01' from 'origin'.
xxx@xxx MINGW64 ~/Desktop/tst (br01)
$ git status
On branch br01
Your branch is up to date with 'origin/br01'.
nothing to commit, working tree clean
xxx@xxx MINGW64 ~/Desktop/tst (br01)
$ git branch --set-upstream-to=origin/br01 br01
Branch 'br01' set up to track remote branch 'br01' from 'origin'.
xxx@xxx MINGW64 ~/Desktop/tst (br01)
$ vi br01.txt
xxx@xxx MINGW64 ~/Desktop/tst (br01)
$ git pull origin br01
From https://gitee.com/w-wanjin/harmony-learn
* branch br01 -> FETCH_HEAD
Already up to date.
xxx@xxx MINGW64 ~/Desktop/tst (br01)
$ git add .
warning: LF will be replaced by CRLF in br01.txt.
The file will have its original line endings in your working directory
xxx@xxx MINGW64 ~/Desktop/tst (br01)
$ git commit -m "br01 commit"
[br01 d6cb709] br01 commit
1 file changed, 1 insertion(+)
create mode 100644 br01.txt
$ git push origin br01
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 311 bytes | 77.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.3]
To https://gitee.com/w-wanjin/harmony-learn.git
9e27c5e..d6cb709 br01 -> br01
git push --set-upstream origin br02
示例:
$ git checkout -b br02
Switched to a new branch 'br02'
xxx@xxx MINGW64 ~/Desktop/tst (br02)
$ vi br02.txt
xxx@xxx MINGW64 ~/Desktop/tst (br02)
$ git push --set-upstream origin br02
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.3]
remote: Create a pull request for 'br02' on Gitee by visiting:
remote: https://gitee.com/w-wanjin/harmony-learn/pull/new/w-wanjin:br02...w-wanjin:master
To https://gitee.com/w-wanjin/harmony-learn.git
* [new branch] br02 -> br02
Branch 'br02' set up to track remote branch 'br02' from 'origin'.
和本地合并过程一样,合并完成后 push 到远程库即可
xxx@xxx MINGW64 ~/Desktop/tst (br01)
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
xxx@xxx MINGW64 ~/Desktop/tst (master)
$ git merge br01
Updating 9e27c5e..d6cb709
Fast-forward
br01.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 br01.txt
xxx@xxx MINGW64 ~/Desktop/tst (master)
$ git add .
xxx@xxx MINGW64 ~/Desktop/tst (master)
$ git commit -m "merge br01 to master"
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
xxx@xxx MINGW64 ~/Desktop/tst (master)
$ git push
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.3]
To https://gitee.com/w-wanjin/harmony-learn.git
9e27c5e..d6cb709 master -> master
git branch -d br01
示例:
xxx@xxx MINGW64 ~/Desktop/tst (master)
$ git branch -d br01
Deleted branch br01 (was d6cb709).
xxx@xxx MINGW64 ~/Desktop/tst (master)
$ git branch
* master
git push origin --delete br01
示例
$ git push origin --delete br01
remote: Powered by GITEE.COM [GNK-6.3]
To https://gitee.com/w-wanjin/harmony-learn.git
- [deleted] br01
根据 git log -d 获取要回恢复的提交,来恢复分支
git branch brrev commit_id // 通过最后一次提交恢复,恢复到一个新的分支内,也可以恢复到原分支
示例:
xxx@xxx MINGW64 ~/Desktop/tst (master)
$ git log -g
commit d6cb709608a3edf11a0e4e0f40a6c960b0ec1df3 (HEAD -> master, origin/master)
Reflog: HEAD@{0} (wangwj )
Reflog message: checkout: moving from d6cb709608a3edf11a0e4e0f40a6c960b0ec1df3 to master
Author: wangwj
Date: Thu Jun 30 12:41:25 2022 +0800
br01 commit
.......
xxx@xxx MINGW64 ~/Desktop/tst (master)
$ git branch brrev d6cb709608a3edf11a0e4e0f40a6c960b0ec1df
xxx@xxx MINGW64 ~/Desktop/tst (master)
$ git checkout brrev
Switched to branch 'brrev'
xxx@xxx MINGW64 ~/Desktop/tst (brrev)
$ cat br01.txt
test br01