Git 常见操作和术语解读
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 commit
或 git 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 技术交流群。
上一篇: Window 常见知识点
下一篇: TypeScript 常见问题
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论