Git 常见操作和术语解读

发布于 2024-10-31 10:37:27 字数 3908 浏览 4 评论 0

HEAD

在 Git 中,用 HEAD 表示当前版本,也就是最新的提交,上一个版本就是 HEAD^ ,上上一个版本就是 HEAD^^ ,当然往上 100 个版本写 100 个 ^ 比较容易数不过来,所以写成 HEAD~100

配置姓名邮箱

git config user.name "你的姓名"
git config user.email "你的邮箱"
// 全局
git config --global user.name "你的姓名"
git config --global user.email "你的邮箱"

git reset

回退版本

#默认就是-mixed 参数。
git reset <commit-id> 

#回退至上个版本,表示将本地版本库的头指针全部重置到上个版本,
#且将这次提交之后的所有变更都移动到工作区(之前暂存区丢失和工作区还继续存在)
#工作区已经有冲突的文件,则以工作区的为准,变更的将丢失
git reset --mixed HEAD^ 

#回退至三个版本之前,表示将本地版本库的头指针全部重置到三个版本之前,
#且将这次提交之后的所有变更都移动到暂存区(之前暂存和工作区还继续存在)
#暂存区已经有冲突的文件,则以暂存的为准,变更的将丢失
git reset --soft HEAD~3 

#彻底回退到指定 commit-id 的状态,暂存区和工作区也会变为指定 commit-id 版本的内容,Untracked files 还继续存在
#如果 reset 到已经 push 的版本,此时如果 pull,会将本地仓库同步同步成远程,
#                         此时如果 push -f,会将远程同步成本地
#                         此时如果 push 'Updates were rejected ... current branch is behind'
git reset --hard <commit-id>

git checkout

撤回并覆盖工作区的修改(回到最近一次 git commitgit add 时的状态)

# 从(本/远) 仓库取出 test.txt 替换到工作区,并删除暂存区的 test.txt
git checkout <commit-id> -- test.txt    
# 从暂存区取出 test.txt 替换到工作区(如果暂存区没有就从(本/远) 仓库取,就同上)
git checkout –- test.txt

切换分支(不加--)

git checkout <branch-name>

替换上一次提交(不管是否提交)

git commit --amend --allow-empty -m 提交语句

关联远程分支

git branch -u origin/mybranch
// 或
git push origin/mybranch -u

关联之后, git branch -vv (展示本地分支关联远程仓库的情况)就可以展示关联的远程分支名了,
同时推送到远程仓库直接: git push ,不需要指定远程仓库了

切回到某个标签

一般上线之前都会打 tag,就是为了防止上线后出现问题,方便快速回退到上一版本。
下面的命令是回 到某一标签下的状态:

git checkout -b branch_name tag_name

git revert

以新增一个 commit 的方式还原某一个 commit 的修改,还原到暂存区
修改之前必须保持暂存区和工作区干净

git revert <commit-id>
git revert --abort // 取消 revert

git restore

#从本地仓库取出文件覆盖工作区
git restore 3.txt
#从暂存区取出文件不覆盖工作区
git restore --staged 3.txt

cherry-pick

把 A 分支的某一个 commit,放到 B 分支上

git checkout <branchB-name> && git cherry-pick <commit-id-from-B>

stash

git stash    // 存储所有的文件
git stash -u    //     存储所有的文件包括未跟踪的
git stash list // 展示所有的 stashes
git stash apply <stash@{n}> // 回到某个 stash 的状态
git stash clear // 删除所有的 stash

git rebase

变基,使 git 提交纪录成一条直线

git pull --rebase
# 如果有冲突先解决冲突(可能要解决多次),然后 git add 提交,不用 commit
# 等价于 git fetch --all && git rebase branch
git rebase --continue
# 如果不想解决冲突的时候不想继续 rebase
git rebase --abort

执行 git pull --rebase 的时候必须保持本地目录干净
即:不能存在状态为 modified 的文件。(存在 Untracked files 是没关系的)

git pull --rebase

# 结果如下
error: cannot pull with rebase: You have unstaged changes.
error: please commit or stash them.

参考文献 参考文献

变基 vs. 合并 总的原则是,只对尚未推送或分享给别人的本地修改执行变基操作清理历史, 从不对已推送至别处的提交执行变基操作,这样,你才能享受到两种方式带来的便利。

取消 merge

git merge --abort

强制推送

git push -f <remote-name> <branch-name>

日志

git log --pretty=oneline    // 简短版本的日志
git reflog //    包括更改了 HEAD 的日志

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

眉黛浅

暂无简介

0 文章
0 评论
675 人气
更多

推荐作者

我们的影子

文章 0 评论 0

素年丶

文章 0 评论 0

南笙

文章 0 评论 0

18215568913

文章 0 评论 0

qq_xk7Ean

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文