一站式学会git

🪐写在前面: 本文章针对于git使用不熟练的朋友以及在使用 git 时可能遇到的一些case如何解决。如果你对Git已经很熟练了,那么本文你可以略过啦~

一、本地仓库操作

1.创建与获取仓库

# 在当前目录初始化一个新的 Git 仓库
git init

# 克隆一个远程仓库到本地
git clone <远程仓库URL>

2. 查看状态与历史

# 查看工作区和暂存区的状态(最常用的命令)
git status

# 查看提交历史
git log
git log --oneline # 简洁模式显示 例:git log --oneline --grep="用户登录功能"
git log --graph # 图形化显示分支合并历史
git log -p # 显示每次提交的内容差异

# 查看工作区中文件的更改(尚未暂存)
git diff

# 查看已暂存的文件更改(已 add 但未 commit)
git diff --staged

3. 跟踪与提交更改

# 将文件的修改添加到暂存区(跟踪更改)
git add <文件名>
git add . # 添加当前目录下所有更改

# 将暂存区的内容提交到本地仓库
git commit -m "提交信息的描述"

# 修改上一次的提交信息(前提是还没推送到远程)
git commit --amend

4. 撤销与回退

# 撤销工作区中某个文件的修改(危险操作,不可恢复)
git checkout -- <文件名> git restore <文件名>

# 将文件从暂存区移除,但保留工作区的修改
git reset <文件名>

# 回退到某个提交,并丢弃之后的提交历史(谨慎使用!)
git reset --hard <commit_id>

# 撤销某次提交,但不破坏历史提交(更安全,推荐)
git revert <commit_id>

场景:使用 git revert 撤销提交:

# 1. 发现生产环境有bug,需要紧急回滚某个功能
git log --oneline --grep="用户登录功能"

# 2. 找到引入问题的提交
# 假设提交ID是 abc1234

# 3. 创建revert提交
git revert abc1234 -m "紧急回滚:用户登录功能存在安全漏洞"
# git 自动生成 commit,不需要手动执行 git commit

# 4. 推送到远程
git push origin main

# 5. 团队其他成员拉取更新
git pull origin main

5.分支管理

# 查看所有分支
git branch

# 创建新分支
git branch <新分支名>

# 切换到指定分支
git checkout <分支名>  或  git switch <分支名>

# 创建并切换到新分支
git checkout -b <新分支名> git switch -c <新分支名>

# 删除分支(如果分支未合并,会失败)
git branch -d <分支名>
# 强制删除分支
git branch -D <分支名>

# 将当前分支与指定分支合并
git merge <要合并过来的分支名>

# 查看历史提交

git checkout <commit-hash>    git switch --detach <commit-hash>

二、远程仓库协作

1.查看与连接

# 查看已配置的远程仓库
git remote -v

# 添加一个远程仓库地址,并起一个别名(通常 origin 是默认的)
git remote add <别名> <远程仓库URL>

2. 获取与拉取

# 从远程仓库获取更新,但不会自动合并到工作区
git fetch <远程仓库别名>

# 从远程仓库获取更新,并自动与当前分支合并(= git fetch + git merge)
git pull <远程仓库别名> <远程分支名>

# 推荐使用 rebase 方式拉取,可以使历史线更整洁
git pull --rebase <远程仓库别名> <远程分支名>

3.推送

# 将本地分支推送到远程仓库
git push <远程仓库别名> <本地分支名>

# 删除远程分支
git push <远程仓库别名> --delete <远程分支名>

三、常见问题与解决

如果我们修改了boe分支,此时想要更改feat/add-harmony使之与boe分支一样,那么可以执行以下命令,执行完后,远程feat/add-harmony会合上新代码,此操作不需要申请权限。

# 强制覆盖

git checkout feat/add-harmony

git reset --hard boe

git push origin feat/add-harmony

本地分支下修改四处代码执行了四次git commit操作,但是没有push到仓库,同时又在该分支下进行了别处的修改,这个修改没有执行git commit,如何将这五处修改一起提交到仓库去?

# 暂存所有修改

git add.

# 重置最近四个提交(保留更改)

git reset --soft HEAD~4

# 创建新提交

git commit -m "合并所有修改"

# 强制推送

git push origin 分支名 --force

# 缺点:会丢失原有commit信息

如果使用git checkout 分支名切换到别的分支,此时如果当前分支的修改没有提交(commit)或储藏(stash),那么Git会阻止你提交。如何做?

1、使用 git stash:作用是:将您在工作区和暂存区中所有“未提交的更改”(包括已 git add 的和未 git add 的)保存到一个临时的存储栈中。将您的代码库恢复到最后一次提交 的状态。

此时如果想继续修改工作区,并且希望恢复之前储藏的那些更改,需要执行 git stash pop,此时工作区已经恢复,可继续接着上次的进行修改,然后执行git add 和 git commit 将修改提交到本地仓库了!

2、使用 git commit

此时如果想继续修改刚才已经执行 git commit 的工作区,需要执行 git commit --amend,作用:修改最近一次提交,amend 操作会替换原来的提交,生成一个全新的提交ID,注意:该操作只能修改当前分支的最近一次提交。

使用Git管理时,对工作区的代码A进行修改后,执行 git add和git commit,但是此时发现刚才对于代码A的修改不正确,而此时代码A已经执行了git commit操作,如何撤销 git commit操作,重新对代码A进行修改?

1、执行 git commit --amend:修改最近一次提交,覆盖之前的提交操作,生成一个全新的提交ID,历史提交记录中不会出现上次的提交操作。

2、执行 git reset --soft HEAD~1:撤销最近一次提交,但保留更改在暂存区。注意,执行完该命令后,如果继续对该提交进行修改,修改完之后要执行 git add 你修改的文件名,否则会出现工作区和暂存区内容不一致的情况!(撤销此操作:git reset --soft HEAD@{1}

3、执行 git reset --hard HEAD~1(谨慎使用!):撤销提交并且丢弃所有工作区和暂存区的更改,此时工作区会完全恢复到上一次提交时的状态,上一次的修改会全部消失!

如果此时你已经推送到远程仓库了怎么办?

执行 git push --force-with-lease:该命令相比于git push --force 的好处是会对你本地存储的远程分支记录和实际远程分支记录对比,如果不一致,说明远程分支有了你本地未知的新提交,则拒绝提交。这样做是为了避免你的提交覆盖之前你的队友的提交。

如果被拒绝推送,说明远程分支有了你本地未知的新提交,如何处理?

1、# 获取远程最新状态,但不会自动合并
git fetch origin

2、执行 git rebase origin/feature/login 或 执行 git merge origin/feature/login

PS:如果在rebase或merge时出现冲突:
# Git会提示冲突文件,你需要手动解决
# 编辑标记为冲突的文件,解决后:
git add <解决冲突的文件>
git rebase --continue  # 如果正在rebase
# 或
git commit -m "解决合并冲突"  # 如果正在merge

此时,可以安全地强制推送了:
git push --force-with-lease origin feature/login

在使用 git 时,如果想标记重要的版本节点(如 v1.0.0),如何做?

# 创建一个带注释的标签
git tag -a v1.0.0 -m "Release version 1.0.0"

# 将标签推送到远程仓库
git push <远程仓库别名> v1.0.0

你在 master 分支下创建了一个新分支,在你开发过程中,其他成员修改并提交了其他分支到 master,或者你已经同步了 master 的最新更改到你的分支,但是在 Merge 时,出现了冲突,此时如何处理?

git checkout feat/my-feature
git pull --rebase origin master
# 解决冲突(如果有)
git add .
git rebase --continue

# 推送到远程(更安全,会先检查远程分支是否有人更新过,如果没人更新才允许覆盖)
git push origin feat/my-feature --force-with-lease

更多文章:git的底层原理详解-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值