Git 命令总结
配置
# 配置用户信息
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
# 查看配置
git config --list
clone和提交
# 克隆远程仓库
git clone 仓库URL
注意clone出来的就是最新的代码
# 添加文件到暂存区
git add <文件名> # 添加单个文件
git add . # 添加所有文件
# 提交更改到本地
git commit -m "提交信息"
# 推送本地代码到远程
A. 一般先拉取下最新的代码
git pull # 就是当前分支(前提是当前分支和远程分支已经关联)
git pull = git fetch + git merge (当本地和远程都有更新的时候,git log 里面会有一个合并的记录)
B.执行 git push
这里有一个注意的问题,就是如果本地没有和远程仓库当前分支没有建立上下游关系,不能用git push,要用
git push -u origin main(分支名)
当本地代码想推送到远程的某个仓库也是使用的 git push -u origin main(分支名)
git fetch # 只获取 origin 的分支,注意的是该命令执行完,即已经获取了最新的代码,并没有任何日志输出,如果网络或者其他出错,才会有信息输出
git fetch --all # 获取 origin + upstream 的所有分支
git fetch upstream # 只获取 upstream 的分支
远程地址管理的常见命令
git remote -v # 查看所有远程地址
git remote # 只显示远程名称
添加远程地址
git remote add origin<名称> <URL> # 我们一般情况远程地址就一个,大多数都叫 origin
删除远程地址
git remote remove <名称> # 完全删除
git remote rm <名称> # 简写形式
git remote rename <旧名称> <新名称> # 重命名远程地址
git remote set-url <名称> <新URL> # 修改远程地址URL
pull 操作,获取下当前分支最新的代码
其他问题总结:
1.如何确保代码已经推送到了远端?
git status
✅ "Your branch is up to date with 'xxxx'" # 完全同步 ⚠️ "Your branch is ahead of 'xxxxx' by X commits" # 有未推送提交 ⚠️ "Your branch is behind 'xxxx' by X commits" # 远程有新提交
2.如何查看远程分支的log呢?
git log origin/master # (远程地址别名/分支名)
git log # 默认是当前分支的log
3.如果修改了很多代码,我发现改错分支了,应该如何补救?
未提交使用下面的方法
git add . # (把所有改动暂存)
git stash # (把暂存的文件提交到git的暂存栈)
git checkout 本该提交代码的分支
git stash pop # (将暂存栈中的代码放出来)
如果需要保留stash(不删除)git stash apply # 而不是 pop
已经提交使用下面的方法
git checkout 不该提交代码提交了代码的分支
git reset HEAD~1 # (最近一次提交放回暂存区, 并取消此次提交)
git stash # (把暂存的文件提交到git的暂存栈)
git checkout 该提交代码的分支
git stash pop
上面的代码已经把搞到正确的分支了
下面需要切换到错误的分支,使用强推去掉之前的提交
git checkout 错误分支
git push --force-with-lease # (把不该上去的文件回退掉)
注意这里如果直接强推有一个风险,如果当前分支有一个新的提交,你强推会把新的提交搞没了。所以这里不使用git push -f而使用git push --force-with-lease,他会检查远端是否有更新,有更新就会强推失败。
4.我想删除本地的一些提交,这些提交还未推送到远端?
git reset commitId
5.我想删除掉远程的提交?
git revert commitId # 如果是后来又有了修改了改行代码,会报冲突,解决冲突就可以了
git push # 提交就行
上面的方法问题是之前的提交和这次撤销都在git记录上
git reset commitId # (该命令默认会将之前的改变恢复到工作区,你可以选择要不要,这也可以让你从多次提交中选出你要的代码,不要的代码你就删除成为了可能)
git push --force-with-lease # (会检查远程是否有更新)
上面麻烦的是如果你在合并后远程也有了提交。此时比较麻烦了. 先git pull,然后再按照上面的步骤重来一遍
6.本地的提交了三次,我只想第一次和第三次,不想要第二次应该如何解决? 如果已经推送到了远端,又该如何处理?
git reset commitId # (该命令默认会将之前的改变恢复到工作区,你可以选择要不要,这也可以让你从多次提交中选出你要的代码,不要的代码你就删除成为了可能)
git push --force-with-lease # (会检查远程是否有更新)
上面麻烦的是如果你在合并后远程也有了提交。此时比较麻烦了. 先git pull,然后再按照上面的步骤重来一遍
7.rebase和merage有啥区别?
在 main 分支上合并 feature 分支
1. git checkout main
2. git merge feature
# 结果:创建一个合并提交
# 历史看起来像:A - B - E - (merge commit)
# \ /
# C - D --/
将 feature 分支的提交重基到 main 分支
1. git checkout feature
2. git rebase main
# 然后快进合并到 main
3. git checkout main
4. git merge feature # 这将是一个快进合并
# 结果:线性历史
# 历史看起来像:A - B - E - C' - D'
- Merge:保真实历史,适合团队协作
- Rebase:保线性历史,适合个人整理
选择哪种方法取决于你的团队策略和对历史的要求。很多团队采用混合策略:在个人分支上用 rebase 整理,在主分支上用 merge 合并。
8.git checkout commitId 和 git reset commitId 区别?
⚠️ 重要区别总结
使用 git checkout commitId 当你想要:
- �� 查看历史状态:浏览特定提交的代码
- 🧪 临时实验:在历史状态上做实验
- 📊 调试问题:回到问题出现前的状态
- �� 安全操作:不影响任何分支
使用 git reset commitId 当你想要:
- 🗑️ 撤销提交:永久删除最近的提交
- �� 重写历史:重新整理提交历史
- �� 回退分支:将分支指针移动到特定位置
- ⚠️ 注意风险:可能丢失未保存的提交
9.时间穿梭机
git reflog # id (之前的操作的id)
git reset id # (回到之前的操作的地方id)
使用上述操作可以撤销一切操作