git branch
git branch
查看当前代码仓的本地分支
git branch -a
查看当前代码仓的所有分支(包括本地和远程仓库的)
git branch -D your_branch
删除本地的一个分支
git checkout
git checkout your_branch
切换到your_branch分支(如果本地存在your_branch,否则从远程仓库拉取。如果本地和远程仓库均不存在则提示错误)
git checkout -b your_branch
在当前分支的基础上,新建一个分支
git pull
命令详解
git pull
是 Git 版本控制系统中一个常用的命令,用于从远程仓库获取最新更改并合并到当前分支。它是 git fetch
和 git merge
两个命令的组合操作。
基本语法
git pull [options] [<repository> [<refspec>...]]
工作原理
- 获取远程变更:首先执行
git fetch
从远程仓库下载最新的提交和引用 - 合并变更:然后执行
git merge
将这些变更合并到当前分支
常用选项
--rebase
:使用 rebase 而不是 merge 来整合变更
典型工作流程
- 在开始工作前执行
git pull
获取最新代码 - 解决可能出现的合并冲突
- 进行本地开发
- 提交更改前再次
git pull
确保代码是最新的
与远程分支的关系
默认情况下,git pull
会从与当前分支关联的远程跟踪分支获取变更。例如,如果你在本地 main
分支工作,它通常会跟踪 origin/main
远程分支。
配置选项
可以通过以下方式配置默认行为:
git config --global pull.rebase true # 默认使用 rebase
git config --global pull.ff only # 只允许快进合并
常见问题
- 合并冲突:当远程更改与本地更改冲突时,需要手动解决
- 拒绝非快进合并:当远程历史与本地历史分叉且无法简单合并时
- 权限问题:如果没有访问远程仓库的权限,pull 操作会失败
使用示例
# 从默认远程仓库拉取当前分支的更新
git pull
# 从特定远程仓库拉取特定分支的更新
git pull origin feature-branch
# 使用 rebase 方式拉取更新
git pull --rebase
# 拉取更新但不自动合并
git pull --no-commit
git pull
是团队协作开发中最常用的命令之一,确保开发者始终基于最新代码进行工作。
git push 命令详解
git push
是 Git 版本控制系统中用于将本地仓库的提交推送到远程仓库的核心命令。以下是关于 git push
的详细说明:
基本语法
git push <远程仓库名称> <本地分支名称>:<远程分支名称>
常用简化形式
将当前分支推送到远程同名分支:
git push
等同于:
git push origin HEAD
将指定分支推送到远程同名分支:
git push origin feature-branch
将本地分支推送到远程不同名分支:
git push origin local-branch:remote-branch
常用选项
-u
或--set-upstream
:设置上游分支,后续可以直接使用git push
而不需要指定远程仓库和分支git push -u origin main
-f
或--force
:强制推送(慎用,会覆盖远程历史记录)git push -f origin main
--all
:推送所有分支git push --all origin
--tags
:推送所有标签git push --tags
工作流程示例
首次推送新分支:
git checkout -b new-feature # 创建并切换到新分支 git add . # 添加更改 git commit -m "实现新功能" # 提交更改 git push -u origin new-feature # 推送到远程并设置上游跟踪
后续推送更新:
git add . # 添加新更改 git commit -m "修复bug" # 提交新更改 git push # 推送到已设置的上游分支
常见问题解决
远程分支已更新:
git pull origin main # 先拉取远程更改 git push origin main # 再推送本地更改
拒绝非快进推送:
git fetch origin # 获取远程最新状态 git rebase origin/main # 变基到远程分支 git push origin main # 再次尝试推送
删除远程分支:
git push origin --delete old-branch
最佳实践
- 推送前先拉取远程更改,避免冲突
- 为功能开发创建特性分支,而非直接在主分支上工作
- 谨慎使用强制推送,特别是在团队协作环境中
- 定期推送更改,避免本地积累过多未推送提交
通过正确使用 git push
命令,可以有效地与团队成员共享代码变更,保持代码库的同步和一致性。
git diff
显示本次修改没有保存的内容
git status
查看当前有修改的文件
git log
git reset
git reset --hard commitId
分支回退到指定的位置
git rebase
多个commit 合成一个
在git中可以使用rebase命令结合交互式选项(-i)将最近的几次提交合并成一个提交。详细步骤如下:
- 打开终端
- cd到对应的git代码仓目录下
- 运行以下命令:
git rebase -i HEAD~3
这将会打开一个文本编辑器,并显示最近的三次提交。(HEAD指向当前分支的最新提交,HEAD~3表示当前提交的前三个提交)。
4. 在文本编辑器中,你将会看到类似这样的列表
pick aghsdf1b 第三次提交的内容
pick asdfsknl 第二次提交的内容
pick fdlwebdf 第一次提交的内容
- 要将这三个提交合并成一个,你需要把列表中的第二个和第三个提交前面的pick改为fixup。fixup会合并提交但会丢弃初第三个提交外的所有提交信息。
pick aghsdf1b 第三次提交的内容
fixup asdfsknl 第二次提交的内容
fixup fdlwebdf 第一次提交的内容
保存并关闭编辑器(ctrl+O, Enter, ctrl+X)
现在git会重新应用这些提交,并将他们合并为一个新的提交。
注意:这种合并并提交的操作会改变你的提交历史。如果这些提交已经推送到远程仓库,并且其他人也在这些提交上进行了工作,使用rebase可能会导致问题。在这种情况下,需要确保所有相关人员都了解你的操作,并准备好处理可能出现的冲突。把你的修改推到远程仓库
git commit --amend
git push origin your_branch --force
git cherry-pick
将commit合入到另一个分支上
git checkout target_branch # 切换到目标分支
git pull # 确保当前分支是最新的
git cherry-pick commitId # 将一个commit的修改内容合并到目标分支
git push origin target_branch # 将目标分支推到远程仓库
将多个commit通过cherry-pick合入到另一个分支变成一个commit
# 首先执行cherry-pick但不自动提交
git checkout target_branch # 切换到目标分支
git cherry-pick --no-commit commitID1 commitID2 commitID3
# 然后手动创建一个新的提交
git commit -m "合并多个commit的更改"
git push origin target_branch # 将目标分支推到远程仓库
彩蛋
安装git可视化工具
cd 到对应的代码仓文件夹下
打开可视化工具: git gui