一、简介
存储
主要包括四个区域:工作区(working directory)、暂存区(staging area)、本地仓库(local repository)和远程仓库(remote repository)。
流程
在工作区(working directory)中编写和修改代码;
首先通过 git add 命令将修改添加到暂存区(staging area);
其次使用 git commit 命令将暂存区的修改提交到本地仓库(local repository);
最后执行 git push 命令将本地仓库的提交推送到远程仓库(remote repository)。
二、撤销提交到本地仓库的代码
命令
撤销最近一次提交的代码
git reset --soft HEAD~1
注: HEAD~n 数字 “ n “
表示连续撤销的次数;
说明
--soft
仅重置本地仓库,保留工作区和暂存区的更改,撤销commit,不撤销git add(回滚到暂存区)
--mixed
(默认参数):重置本地仓库和暂存区,但保留工作区的更改。撤销commit,撤销git add(回滚到工作区)
--hard
重置本地仓库、暂存区和工作区,所有提交的更改都会丢失。(改动的代码会被删除)
三、撤销提交到远程仓库的代码
1. 查看日志
git log
说明
- git log (可以查看git仓库的所有提交详细记录)
- git log --pretty=oneline (只显示版本号和备注)
- git reflog (可以查看到已经被删除的commit记录和reset的操作)
2. 复制提交的ID
commit 1dbb482746ac062340a1be23ee88cd58f01b4160
Author: Jayknoxqu<jayknoxqu@gmail.com>
Date: Tue Jan 14 16:43:07 2025 +0800
fix: BUG:修复空指针异常
复制commit后面的ID1dbb482746ac062340a1be23ee88cd58f01b4160
3. 撤销指定的版本
git reset --soft 1dbb482746ac062340a1be23ee88cd58f01b4160
4.强制推送到远程仓库
git push --force <origin 分支名>
四、命令reset和revert的区别
1、无回滚记录
git reset [--soft | --mixed | --hard | --merge | --keep] [-q] [<commit_id>]
2、有回滚记录 | 安全能找回
git revert <commit-hash| HEAD>
五、修改已提交的commit注释
修改最后一次提交的注解,但未提交到远程仓库
git commit --amend
此时会进入默认vim编辑器,输入 i 进入编辑模式,然后修改注解,按ESC推出编辑,最后输入
:wq
保存并退出
如果是已经提交到远程仓库则需要强制推送
git push --force <origin 分支名>
六、移植其他分支的代码
简介
git cherry-pick
命令可以从一个(A)分支的提交历史中挑选出特定的(commit)提交,并将其应用到当前(B)分支,从而实现功能或补丁的移植。
操作
首先复制(A)分支提交的哈希值。然后切换到(B)分支,运行 git cherry-pick <commit-hash>
命令。如果你想要复制多个提交,可以多次运行该命令,或者指定一个提交范围( git cherry-pick <start-commit-hash> .. <end-commit-hash>
)。
-
注:
<start-commit-hash>
不包含该提交,<end-commit-hash>
包含该提交。
冲突
解决冲突后,需要使用git add
标记冲突已解决,并使用git cherry-pick --continue
继续迁移操作。
终止
如果在解决冲突过程中,我们想终止并撤销迁移,可以执行 git cherry-pick --abort
来取消操作。