Git 常用操作流程
1、初始化仓库
第一次初始化的两种方式:
git init # 初始化本地git仓库
git remote add origin git@github.com:帐号名/仓库名.git # 添加远程版本库
git pull origin master # 拉取远程分支
git clone git@github.com:git帐号名/仓库名.git # 克隆仓库
测试1(初始化本地仓库,关联远程版本库):
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git remote add origin git@gitee.com:public-investment-adviser/testing.git
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git pull origin master
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 10 (delta 0), reused 0 (delta 0), pack-reused 7
Unpacking objects: 100% (10/10), 2.74 KiB | 7.00 KiB/s, done.
From gitee.com:public-investment-adviser/testing
* branch master -> FETCH_HEAD
* [new branch] master -> origin/master
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ ls -a
./ ../ .git/ README.en.md README.md
测试2(克隆远程仓库):
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test
$ rm -rf ./gittest/
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test
$ ls
index.html index.php ModalBox/ phpinfo.php SwiperUpDown_demo-master/
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test
$ git clone git@gitee.com:public-investment-adviser/testing.git gittest
Cloning into 'gittest'...
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 10 (delta 0), reused 0 (delta 0), pack-reused 7
Receiving objects: 100% (10/10), done.
Resolving deltas: 100% (1/1), done.
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test
$ ls
gittest/
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test
$ cd gittest/
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ ls -a
./ ../ .git/ README.en.md README.md
2、普通提交
git add 文件名 # 将某个文件存入暂存区
git add . # 将所有文件提交到暂存区
git add b c # 把b和c存入暂存区
git commit -m "备注信息" # 提交到仓库
git commit -am "备注信息" # 若已经有若干文件放入仓库,再次提交可以不用git add和git commit -m "备注信息" 这2步,
# 直接用将内容放至仓库 也可用git commit -a -m "备注信息"
git push -u origin master # 推送到远端仓库,-u 保存远端分支地址,之后可以省略 origin master
push
之前先 pull
拉取一下。
注意: git commit -am
所提交的是 tracked
状态的文件,如果是新创建的文件它的状态是 untracked
, 无法使用 -am
提交。
tracked
状态本身又有三个子状态:modified
,staged
和committed
。- 一个未经修改的文件被添加到 git 中之后将会是
staged
状态,如果文件已经在 git 中修改后就是modified
状态,此时我们运行git commit
将会使这个文件变为committed
状态,变为committed
状态之后,git 就为该项目生成了一个snapshot
(快照),我们就可以将其 push 到 github 中。
- 一个未经修改的文件被添加到 git 中之后将会是
git status -s
所显示的状态码:
状态码 | 描述 |
---|---|
’ ’ | unmodified |
M | modified |
A | added |
D | deleted |
R | renamed |
C | copied |
U | updated but unmerged |
?? | untracked |
!! | ignored |
测试:
- 添加一个文件到暂存区。
- 添加多个文件到暂存区。
- 添加所有改动过的文件到暂存区。
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ touch a.txt b.txt c.txt d.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ ls
a.txt b.txt c.txt d.txt README.en.md README.md
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git add a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git status -s
A a.txt
?? b.txt
?? c.txt
?? d.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git add b.txt c.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git status -s
A a.txt
A b.txt
A c.txt
?? d.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git add .
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git status -s
A a.txt
A b.txt
A c.txt
A d.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git commit -m 'add abcd'
[master cb272ed] add abcd
4 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a.txt
create mode 100644 b.txt
create mode 100644 c.txt
create mode 100644 d.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 6 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 314 bytes | 314.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:public-investment-adviser/testing.git
36ede56..cb272ed master -> master
- 添加到缓存区、备注操作合并,并提交。
- 修改
a.txt
使用-am
提交。 - 添加一个
aa.txt
,测试是否能是-am
提交。
- 修改
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ ls
a.txt b.txt c.txt d.txt README.en.md README.md
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ echo 'a' >> a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git status -s
M a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git commit -am 'mod a'
[master c986073] mod a
1 file changed, 1 insertion(+)
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git status -s
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ touch aa.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git status -s
?? aa.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git commit -am 'add aa'
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)
Untracked files:
(use "git add <file>..." to include in what will be committed)
aa.txt
nothing added to commit but untracked files present (use "git add" to track)
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git add aa.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git commit -am 'add aa'
[master 7c4a280] add aa
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 aa.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git status -s
3、撤回操作
⑴、放弃工作区的内容
git checkout . # 放弃工作区所有文件的修改
git checkout -- 文件名 # 放弃工作区某个文件的修改,同 git restore
git restore 文件名 # 撤消工作区的修改返回到最近一次add(暂存区)的版本或者最近一次commit(当前版本库)的版本
测试:
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ echo '111' >> a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.
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: a.txt
no changes added to commit (use "git add" and/or "git commit -a")
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git checkout -- a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.
nothing to commit, working tree clean
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ cat a.txt
a
⑵、撤回暂存区内容
git reset HEAD # 撤回暂存区所有文件修改
git reset HEAD 文件名 # 撤回暂存区指定文件
测试:
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ echo '222' >> a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ echo '222' >> b.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git add .
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git status -s
M a.txt
M b.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git reset HEAD a.txt
Unstaged changes after reset:
M a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git status -s
M a.txt # 这里的 M 是红色的
M b.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git reset HEAD
Unstaged changes after reset:
M a.txt
M b.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git status -s
M a.txt # 这里的 M 是红色的
M b.txt # 这里的 M 是红色的
⑶、撤回已提交内容
撤回暂存区的内容依然时当前版本,如果已经 commit 后,产生了新的版本,所以需要回退到上一版本的内容。
git reset HEAD^ # 恢复成上次提交的版本
git reset HEAD^^ # 恢复成上上次提交的版本,就是多个^,以此类推或用~次数
git reset HEAD~N # N直接指定倒数第几版本
git reset [--hard] [版本号|文件名]
--soft:只是改变HEAD指针指向,缓存区和工作区不变;
--mixed:修改HEAD指针指向,暂存区内容丢失,工作区不变;
--hard:修改HEAD指针指向,暂存区内容丢失,工作区恢复以前状态;
git reset --hard HEAD^ # 撤销之前的commit,并且舍弃之前commit的修改
git reset --soft HEAD^ # 撤销之前的commit,并且保留之前的commit修改
测试:
- 使用
--hard
撤回后,a.txt
中写入的222
已经没有了,直接回退到上一次提交后的状态,之前已修改的文件内容不会保存。
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git add .
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git status -s
M a.txt
M b.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git commit -m 'commit撤回测试'
[master 3bc836d] commit鎾ゅ洖娴嬭瘯
2 files changed, 2 insertions(+)
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git reset --hard HEAD^
HEAD is now at 0e010fd 鍒嗙晫绾?
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git status -s
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ ls
a.txt aa.txt b.txt c.txt d.txt README.en.md README.md
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ cat a.txt
a
111
- 使用
--soft
撤回后,a.txt
中写入的222
依然存在,回退到本次提交前的状态,之前修改的文件内容会保留。
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ echo '222' >> a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git add .
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git status -s
M a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git commit -m 'commit soft test'
[master cb48386] commit soft test
1 file changed, 1 insertion(+)
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git reset --soft HEAD^
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ cat a.txt
a
111
222
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git status -s
M a.txt
- 直接回退指定版本,使用
git reflog
查看版本号,使用git reset [--soft] 版本号
回退。
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git reflog
0e010fd (HEAD -> master, origin/master, origin/HEAD) HEAD@{0}: reset: moving to HEAD^
cb48386 HEAD@{1}: commit: commit soft test
0e010fd (HEAD -> master, origin/master, origin/HEAD) HEAD@{2}: reset: moving to HEAD^
3bc836d HEAD@{3}: commit: commit撤回测试
0e010fd (HEAD -> master, origin/master, origin/HEAD) HEAD@{4}: reset: moving to HEAD
0e010fd (HEAD -> master, origin/master, origin/HEAD) HEAD@{5}: commit: 分界线
7c4a280 HEAD@{6}: commit: add aa
c986073 HEAD@{7}: commit: mod a
cb272ed HEAD@{8}: commit: add abcd
4、分支合并
git merge 分支名 # 用于合并指定分支到当前分支
git merge --quit # 退出当前分支合并,当合并后冲突很多,要撤回合并分支就可以用这个命令
git merge --no-ff -m "message" 分支名 # 加上–no-ff参数(Fast forward)就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并
git merge --squash 分支名 # 舍弃分支的commit 记录,合并后重新commit,如果合并分支上的历史无意义,可舍弃就可以使用这个,使提交历史变得更清晰
测试:
- 合并前必须要保证需要合并分支修改的内容都进行commit。
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git checkout -b dev
Switched to a new branch 'dev'
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (dev)
$ ls
a.txt aa.txt b.txt c.txt d.txt README.en.md README.md
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (dev)
$ echo 'a.txt' >> a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (dev)
$ git checkout master
Switched to branch 'master'
M a.txt
Your branch is up to date with 'origin/master'.
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git merge dev
Already up to date.
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git checkout dev
Switched to branch 'dev'
M a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (dev)
$ git add .
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (dev)
$ git commit -m 'dev mod a'
[dev a5b2f35] dev mod a
1 file changed, 1 insertion(+)
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (dev)
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git merge dev
Updating d9d12d4..a5b2f35
Fast-forward
a.txt | 1 +
1 file changed, 1 insertion(+)
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ cat a.txt
a
111
222
a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git log
commit a5b2f35c073b1858486f467ea815d917dbfe4aac (HEAD -> master, dev)
Author: 云三木 <2440049332@qq.com>
Date: Tue Jan 31 16:25:57 2023 +0800
dev mod a
commit d9d12d42b07f2983f4248e9335e62eb4b4c8284e (origin/master, origin/HEAD)
Author: 云三木 <2440049332@qq.com>
Date: Tue Jan 31 16:22:36 2023 +0800
commit soft test
5、解决冲突
当我们在使用 pull
、merge
、rebease
时都可能会出现冲突。使用任意的文本编辑工具编辑有冲突的文件,去除冲突标记(就是>>>>>>>> ======= <<<<<<这样的东西),并把文本冲突解决掉。
然后使用 git add 有冲突的文件
,这时文件的冲突标记就变成了修改标记了(使用 git status -s
查看)。
将所有有冲突的文件解决完后,使用 git commit -m "备注"
提交就算完成整个合并过程了。
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ vim a.txt
a
333
222
a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git add .
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git commit -m 'master mod a 01'
[master 84a14a4] master mod a 01
1 file changed, 1 insertion(+), 1 deletion(-)
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git checkout dev
Switched to branch 'dev'
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (dev)
$ vim a.txt
a
222
222
a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (dev)
$ git add .
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (dev)
$ git commit -m 'dev mod a 01'
[dev b90edaa] dev mod a 01
1 file changed, 1 insertion(+), 1 deletion(-)
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (dev)
$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 3 commits.
(use "git push" to publish your local commits)
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git merge dev
Auto-merging a.txt
CONFLICT (content): Merge conflict in a.txt
Automatic merge failed; fix conflicts and then commit the result.
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master|MERGING)
$ git status
On branch master
Your branch is ahead of 'origin/master' by 3 commits.
(use "git push" to publish your local commits)
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: a.txt
no changes added to commit (use "git add" and/or "git commit -a")
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master|MERGING)
$ cat a.txt
a
<<<<<<< HEAD
333
=======
222
>>>>>>> dev
222
a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master|MERGING)
$ git log --graph
* commit 84a14a4e2745276c2ca14046012eb2e4768f66aa (HEAD -> master)
| Author: 云三木 <2440049332@qq.com>
| Date: Tue Jan 31 16:49:21 2023 +0800
|
| master mod a 01
|
* commit 8be3febe6df1a0e7b67fdcf070ede8009c100233
| Author: 云三木 <2440049332@qq.com>
| Date: Tue Jan 31 16:48:11 2023 +0800
|
| dev mod a2
|
* commit a5b2f35c073b1858486f467ea815d917dbfe4aac
| Author: 云三木 <2440049332@qq.com>
| Date: Tue Jan 31 16:25:57 2023 +0800
|
| dev mod a
|
* commit d9d12d42b07f2983f4248e9335e62eb4b4c8284e (origin/master, origin/HEAD)
| Author: 云三木 <2440049332@qq.com>
| Date: Tue Jan 31 16:22:36 2023 +0800
|
| commit soft test
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master|MERGING)
$ vim a.txt
a
333
222
a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master|MERGING)
$ git status -s
UU a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master|MERGING)
$ git add a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master|MERGING)
$ git commit -m 'merge test 01'
[master 55ed4b3] merge test 01
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git status -s
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git log --graph
* commit 55ed4b3c9cabb6c5a703703f02359739dff30797 (HEAD -> master)
|\ Merge: 84a14a4 b90edaa
| | Author: 云三木 <2440049332@qq.com>
| | Date: Tue Jan 31 17:04:34 2023 +0800
| |
| | merge test 01
| |
| * commit b90edaa22b32fc0c5c0630f4ce85fe6989074275 (dev)
| | Author: 云三木 <2440049332@qq.com>
| | Date: Tue Jan 31 16:50:08 2023 +0800
| |
| | dev mod a 01
| |
* | commit 84a14a4e2745276c2ca14046012eb2e4768f66aa
|/ Author: 云三木 <2440049332@qq.com>
| Date: Tue Jan 31 16:49:21 2023 +0800
|
| master mod a 01
|
* commit 8be3febe6df1a0e7b67fdcf070ede8009c100233
| Author: 云三木 <2440049332@qq.com>
| Date: Tue Jan 31 16:48:11 2023 +0800
|
6、版本回退
已推送到远程仓库后版本回退的两种方式:
git reset --hard commitId # 撤销并舍弃版本号之后的提交记录,commitId 选择撤销之前的那一次commitId
git revert commitId # 撤销,但是保留了提交记录,commitId 是需要撤销的那一次commitId
reset
添加 a.txt,推送到远端仓库,出现错误,现在需要紧急恢复上一版本。
回退步骤:
- 根据
git log
找到 commitId。 - 使用
git reset --hard commitId
回退到上一次提交后的版本,但是之前的工作区和暂存区内容会丢失。- 可根据
git reflog
找到之前 commitId 记录进行回退,恢复工作区和暂存区的内容,排查问题。
- 可根据
git push -f
:强制推送远端仓库覆盖。
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ echo '111' >> a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git add .
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git commit -m 'master add a'
[master 120516e] master add a
1 file changed, 1 insertion(+)
create mode 100644 a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 6 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 311 bytes | 311.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:public-investment-adviser/testing.git
f0975ac..120516e master -> master
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git log
commit 120516e1db680e9efb7c56cc880401f1f7f7b2e0 (HEAD -> master, origin/master, origin/HEAD)
Author: 云三木 <2440049332@qq.com>
Date: Tue Jan 31 17:21:26 2023 +0800
master add a
commit f0975ac72092940e3cf828c08a3b3a48b87dc8b9
Author: 云三木 <2440049332@qq.com>
Date: Tue Jan 31 17:20:40 2023 +0800
删除测试文件
commit 55ed4b3c9cabb6c5a703703f02359739dff30797
Merge: 84a14a4 b90edaa
Author: 云三木 <2440049332@qq.com>
Date: Tue Jan 31 17:04:34 2023 +0800
merge test 01
commit b90edaa22b32fc0c5c0630f4ce85fe6989074275 (dev)
Author: 云三木 <2440049332@qq.com>
Date: Tue Jan 31 16:50:08 2023 +0800
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git reset --soft f0975ac72092940e3cf828c08a3b3a48b87dc8b9
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ ls
a.txt README.en.md README.md
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git status -s
A a.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git push -f
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:public-investment-adviser/testing.git
+ 120516e...f0975ac master -> master (forced update)
revert
回退步骤:
- 添加
b.txt
并推送到远端仓库。 - 根据
git log
查找 commitId,使用git revert
回退。 - 这时
b.txt
还没有还原,所以还需要使用git cherry-pick
重放该提交。 - 修改问题后,推送远端。
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ touch b.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git add .
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git commit -m 'master add b'
[master 319e20f] master add b
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 b.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 6 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 306 bytes | 306.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:public-investment-adviser/testing.git
a77377d..319e20f master -> master
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git log
commit 319e20f2a684000e25153d90648898b3e6a03ca4 (HEAD -> master, origin/master, origin/HEAD)
Author: 云三木 <2440049332@qq.com>
Date: Tue Jan 31 17:55:45 2023 +0800
master add b
commit a77377d5254729ae5e65a5c44c67ebc6ba3fb57b
Author: 云三木 <2440049332@qq.com>
Date: Tue Jan 31 17:55:08 2023 +0800
删除测试文件
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git revert 319e20f2a684000e25153d90648898b3e6a03ca4
Removing b.txt
[master 0426ff1] Revert "master add b"
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 b.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ ls
README.en.md README.md
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git cherry-pick 319e20f2a684000e25153d90648898b3e6a03ca4
[master d4d0520] master add b
Date: Tue Jan 31 17:55:45 2023 +0800
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 b.txt
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ ls
b.txt README.en.md README.md
Admin@DESKTOP-CSH3FGN MINGW64 /e/work/test/gittest (master)
$ git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 6 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 418 bytes | 209.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:public-investment-adviser/testing.git
319e20f..d4d0520 master -> master