- 作者:老汪软件技巧
- 发表时间:2024-09-09 04:01
- 浏览量:
/
/git/git
在 Git 出现之前,开发者通常使用集中式版本控制系统(如 CVS 和 SVN)来管理项目。然而,这些系统存在几个主要问题:
Git 的作用和解决的问题
快速实践
1. 安装 Git
首先,你需要安装 Git。如果你还没安装,可以从 Git 官网下载并安装 Git。
在安装完成后,通过命令行验证 Git 是否安装成功:
git --version
2. 设置用户名和邮箱
Git 会使用用户名和邮箱来标记提交的作者信息。
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
3. 创建一个新的 Git 仓库
创建一个新项目的目录,并在其中初始化 Git 仓库,git init 会在当前目录中创建一个空的 Git 仓库。
# 创建目录
mkdir my-project
cd my-project
# 初始化
git init
# 该方法是已经存在远程库,直接从远程库上clone下来
git clone 远程库地址
4. 添加文件并进行初次提交
echo "# My First Git Project" > README.md
git add README.md
# 提交
git commit -m "Initial commit"
5. 推送到远程仓库(可选)
git remote add origin https://github.com/yourusername/my-project.git
git push -u origin main
Git 配置
# 配置git的用户名和邮箱
git config [user.name](http://user.name/) "user1"
git config user.email "[user1@163.com](mailto:user1@163.com)"
# 全局配置
git config --global user.name xxx
git config --global user.email xxx
# 换行符号的自动设置(是否打开)
Git config --global core.autocrlf false
# 关闭证书校验
git config --system http.sslverify false
# 更新git配置文件中证书存放位置信息:
git config --system http.sslcainfo "D:/ProgramFiles/Git/mingw64/ssl/certs/ca-bundle.crt"
常用命令收集
# 创建一个 git 仓库
git init
git init --bare .git
# 查看状态
git status
# 添加记录
git add file.txt
git add *.txt 提交所有文件
# 提交
git commit - m "msg"
# 从运程库克隆到本地
git clone username@domain:path
# 比如github的版本库一般是git@github.com:用户名/版本库名
# 从远端版本库更新到本地
git pull
# 从本地上传到远端版本库
git push
# 撤消跟踪
git reset head file.txt
# 修改提交
git commit -a -m "msg"
# 添加到上一次add中
git commit --amend
# 撤销 git 的上一个 commit
git reset --soft HEAD^
--soft 不删除工作空间改动代码,撤销commit,不撤销 git add.
--hard 删除工作空间改动代码,撤销commit,撤销 git add.
注意完成这个操作后,就恢复到了上一次的commit状态。
# 创建分支
git checkout -b 分支名称
# 提交并创建分支
git push -u origin 分支名称
# 分支合并
git checkout week 切换到week分支
git commint -a -m "msg" 提交修改
git checkout master 切换到master分支
git merge week 将week合并到master
# 删除分支
git checkout master 切换到master分支
git branch -d 分支名称 删除
git push origin --delete 分支名称 同步到远程版本库
###################################################
# 进行栈存
git stash
当您想记录工作目录和索引的当前状态,但又想返回一个干净的工作目录时,请使用git stash。
该命令将保存本地修改,并恢复工作目录以匹配头部提交。
stash 命令能够将还未 commit 的代码存起来,让你的工作目录变得干净。
# 保存当前未commit的代码
git stash
# 保存当前未commit的代码并添加备注
git stash save "备注的内容"
# 列出stash的所有记录
git stash list
# 删除stash的所有记录
git stash clear
# 应用最近一次的stash
git stash apply
# 应用最近一次的stash,随后删除该记录
git stash pop
# 删除最近的一次stash
git stash drop
###################################################
git cherry-pick
对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。
这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并(git merge)。
另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用 cherry pick。
git cherry-pick
上面命令就会将指定的提交commitHash,应用于当前分支。
这会在当前分支产生一个新的提交,当然它们的哈希值会不一样。
举例来说,代码仓库有master和feature两个分支。
# a - b - c - d Master
# \
# e - f - g Feature
现在将提交f应用到master分支
切换到 master 分支$ git checkout master
cherry pick 操作 git cherry-pick f
上面的操作完成以后,代码库就变成了下面的样子
# a - b - c - d - f Master
# \
# e - f - g Feature
从上面可以看到,master分支的末尾增加了一个提交f。
git cherry-pick命令的参数,不一定是提交的哈希值,分支名也是可以的,表示转移该分支的最新提交。
git cherry-pick A..B
上面的命令可以转移从 A 到 B 的所有提交。它们必须按照正确的顺序放置:提交 A 必须早于提交 B,否则命令将失败,但不会报错。
注意,使用上面的命令,提交 A 将不会包含在 Cherry pick 中。如果要包含提交 A,可以使用下面的语法。
git cherry-pick A^..B
git cherry-pick命令的常用配置项如下。
#(1)-e,--edit 打开外部编辑器,编辑提交信息。
#(2)-n,--no-commit 只更新工作区和暂存区,不产生新的提交。
#(3)-x 在提交信息的末尾追加一行(cherry picked from commit ...),方便以后查到这个提交是如何产生的。
#(4)-s,--signoff 在提交信息的末尾追加一行操作者的签名,表示是谁进行了这个操作。
#(5)-m parent-number,--mainline parent-number 如果原始提交是一个合并节点,来自于两个分支的合并,那么 Cherry pick 默认将失败,因为它不知道应该采用哪个分支的代码变动。-m配置项告诉 Git,应该采用哪个分支的变动。它的参数parent-number是一个从1开始的整数,代表原始提交的父分支编号。
# 代码冲突: 如果操作过程中发生代码冲突,cherry pick 会停下来,让用户决定如何继续操作。
#(1)--continue
git cherry-pick --continue
用户解决代码冲突后,第一步将修改的文件重新加入暂存区(git add .),第二步使用下面的命令,让 Cherry pick 过程继续执行。
#(2)--abort
发生代码冲突后,放弃合并,回到操作前的样子。
#(3)--quit
发生代码冲突后,退出 cherry pick,但是不回到操作前的样子。
总结工具类型优点缺点典型使用场景
Git
分布式 VCS
- 分布式架构,支持离线操作- 快速且轻量化的分支管理- 良好的社区支持和扩展性- 高效存储与检索
- 对新手学习曲线较陡峭- 合并冲突时复杂项目的管理较为繁琐
- 开源项目- 大规模分布式团队开发
Subversion (SVN)
集中式 VCS
- 简单易用,学习曲线平缓- 中央服务器可控制代码访问- 高效处理大文件
- 依赖中央服务器,离线操作有限- 分支管理较重,操作较慢
- 小型团队项目- 非分布式环境
Mercurial
分布式 VCS
- 学习曲线平缓- 分布式架构,与 Git 类似- 处理大项目性能较好
- 社区活跃度较 Git 低- 一些高级功能相比 Git 较弱
- 开源项目- 分布式开发环境
Perforce
集中式/分布式混合 VCS
- 强大、快速,适合处理超大规模项目- 优秀的大文件和二进制文件管理- 分布式和集中式混合模式
- 配置复杂,非开源- 商业授权费用较高
Git 在市场中占据主导地位,适合大多数项目,特别是开源项目和大型团队开发。SVN 仍然在许多企业中使用,适合简单需求的集中式版本控制。Mercurial 类似 Git,但简化了操作,适合需要分布式且希望降低复杂度的项目。Perforce 和 Plastic SCM 则专注于企业级项目,尤其是对大文件和二进制文件的处理,广泛应用于游戏开发等行业。
致谢
更多内容欢迎关注 [ 小巫编程室 ] 公众号,喜欢文章的话,也希望能给小编点个赞或者转发,你们的喜欢与支持是小编最大的鼓励,小巫编程室感谢您的关注与支持。好好学习,天天向上(good good study day day up)。
参考资料
[1]官网:/
[2]源码库:/git/git
[3]Github 官网:
[4]Gitee 官网: