git使用进阶

如何回退已经push的代码?

第一步:

git rebase -i "commit id"  //  这里会处理 commit id 之前的提交记录,不包含 commit id

git rebase -i "commit id"^  // 这里会处理 commit id 以及 commit id 之前的提交记录,包含commit id

比如提交记录顺序:

7bb5dae 第三次提交
1b041cf  第二次提交
7105892  第一次提交

git rebase -i  1b041cf  , 则会修改  1b041cf  和 7bb5dae ,也就是 从第二次提交之后 的提交

第二步:

进入 编辑框后,

选择需要 删除的 提交记录,修改命令为  s 

保存退出

第三步:

git push origin branch_name  -f  // 这里需要加 -f 参数,强制 提交

操作之后,本地库会和远程库不一致,提交时 会提示 先 pull 远程库的代码。所以,如果没有强制提交权限,那么这种操作也是行不通的。

注意的是,虽然回退了,但是 别人拉下来的项目 似乎不会同步 回退,所以 还需要 同步一下信息。

如何回退已经commit没有push的代码

这个时候,记录还在本地:

git reset --hard  commitId 

如何合并多次commit?

第一步:

git rebase -i "a213ef6"^  "ef35b2"  // 需要合并的 commit id 范围

第二步:

进入编辑框后

第一个commit id 是最开始的,需要设置为 p 命令

后面的commit id 是最近的,需要设置为 s 命令 

第三步:

保存,后 进入 编辑 commit message ,编辑 提交 信息

第四步:

此时,会生成一条新的commit id 

执行以下命令来处理:

 git checkout your branch

git reset --hard  新的commit id

git push origin your branch  -f   // 使用参数 -f 进行 强制提交

就OK 了

pull 不下来代码

git pull origin master ,提示: refusing to merge unrelated histories

解决: 用: git pull origin master --allow-unrelated-histories

如果没有强制提交的权限,可以在git仓库-Settings-Respository-Protected branches 进行设置

如何将某个commit合并到指定的分支呢?

1. 切换到 指定分支

2. git cherry-pick  2a206245

删除远程分支/tag

git push origin --delete  branch

git push origin --delete tag tag

查看提交记录的常用命令

git log --oneline -5   #显示 commitId  commit message

git log --pretty=raw -5  #显示commitId  author  commit message

-5 表示显示前5条数据

本地厂库与远程厂库的绑定与解绑

绑定:

git remote add origin git地址

解绑:

git remote -v  // 查看 本地厂库绑定到的远程厂库,显示:  origin 远程厂库git地址

git remote remove origin  // 这样就把远程厂库解绑了

<think>嗯,用户想学习Git的高级用法和技巧,特别是询问关于advanced git tutorial的内容。我需要先整理一下现有的引用资料,看看有哪些相关的内容可以引用。 首先,引用[2]提到了比较Git中功能相似的命令,比如revert、checkout和reset,还有merge和rebase的区别。这部分内容对用户来说应该很有帮助,因为理解这些命令的差异是进阶使用Git的关键。另外,引用里还提到有很多图示帮助理解,这可能是一个好的资源点,可以推荐给用户。 引用[3]提到开发者通常熟悉基本的工作流程,比如创建分支、提交、合并等,但需要进一步的高级技巧。这可能涉及到如何优化工作流程,使用更高效或更安全的命令。 引用[4]解释了HEAD的概念,以及分支切换时HEAD和分支名的关系。这部分属于Git内部原理,了解这些有助于理解高级操作,比如分离HEAD状态或者重置操作。 用户可能已经掌握了Git的基础,现在想深入理解更复杂的操作和内部机制。我需要推荐一些高级主题,比如交互式变基、重置模式、钩子脚本等,并结合引用中的资源,比如比较命令差异的教程和团队协作的最佳实践。 同时,用户可能需要具体的命令示例和场景应用,比如如何用rebase整理提交历史,或者使用reflog恢复丢失的提交。这些例子能帮助用户更好地理解和应用高级技巧。 还要考虑用户可能遇到的问题,比如合并冲突的解决策略,或者如何利用钩子自动化任务。这些都是高级用法中常见的需求,需要详细说明和指导。 最后,确保引用的资料被正确标注,比如引用[2]中的比较命令和图示,引用[4]中的HEAD解释,这样用户可以参考原始资料进一步学习。可能还需要补充一些外部资源链接,但根据要求,只能使用站内引用,所以需要检查是否有其他相关引用可用。 总结下来,回答需要结构清晰,分点列出高级主题,每个主题下给出具体技巧和示例,并结合引用内容进行说明,最后生成相关问题引导用户深入学习。</think>### Git高级用法与技巧指南 #### 1. 理解Git内部机制 - **HEAD与分支的关系**:当切换分支时,HEAD会指向该分支的最新提交。分离HEAD状态时(如直接检出某次提交),HEAD指向具体提交而非分支名,此时提交操作会形成游离状态[^4]。 - **对象存储原理**:Git通过`blob`(文件内容)、`tree`(目录结构)、`commit`(提交信息)和`tag`(标签)四种对象存储数据,可通过`git cat-file -p <hash>`查看对象内容。 #### 2. 高级命令操作 - **交互式变基(Interactive Rebase)**: 使用`git rebase -i HEAD~3`可修改最近3次提交历史(如合并提交、重写提交信息或调整顺序)。例如将多个小提交合并为一个逻辑完整的提交: ```bash pick 1a2b3c1 添加功能A squash 4d5e6f2 修复功能A的BUG ``` - **重置(Reset)模式**: - `--soft`:仅移动HEAD,保留工作区和暂存区(适合修改提交信息)。 - `--mixed`(默认):移动HEAD并重置暂存区,保留工作区修改。 - `--hard`:彻底丢弃所有未提交的更改。 ```bash git reset --hard HEAD~2 # 回退到前两次提交的状态 ``` - **引用日志(Reflog)**: 通过`git reflog`查看所有HEAD变更记录,恢复误删分支或提交: ```bash git checkout -b recovered-branch HEAD@{3} ``` #### 3. 高效工作流技巧 - **暂存部分修改**: 使用`git add -p`交互式选择代码块暂存,避免提交无关代码。 - **贮藏(Stash)增强**: - 命名贮藏:`git stash push -m "临时修复"` - 应用特定贮藏:`git stash apply stash@{1}` - **钩子脚本(Hooks)**: 在`.git/hooks/`目录下添加自定义脚本(如`pre-commit`),实现自动化检查: ```bash # 示例pre-commit钩子:禁止提交包含TODO的代码 if git diff --cached | grep -q 'TODO'; then echo "错误:提交中包含TODO标记!" exit 1 fi ``` #### 4. 复杂场景处理 - **合并策略选择**: - `--no-ff`:禁止快进合并,保留分支历史。 - `ours/theirs`:解决合并冲突时指定保留当前或对方版本: ```bash git checkout --ours conflicted_file.txt ``` - **子模块(Submodule)管理**: 更新嵌套仓库时使用`git submodule update --remote --recursive`,确保依赖项同步。 #### 5. 可视化工具与调试 - **图形化日志**: `git log --graph --oneline --decorate`可显示分支合并拓扑图。 - **二分法调试(Bisect)**: 快速定位引入BUG的提交: ```bash git bisect start git bisect bad HEAD git bisect good v1.0 # 根据测试结果标记good/bad,Git自动缩小范围 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值