Git缺点
学习曲线陡峭,用了很长时间还会发现新问题
大文件处理性能较差
如果仓库中包含大量大型二进制文件(如视频、图像素材或模型文件),仓库体积会迅速膨胀,导致拉取和推送操作变得极其缓慢。
- 权限管理粒度较粗
Git 默认是基于整个仓库进行权限控制的。如果希望实现“开发人员只能访问特定子目录”的细粒度权限,Git原生很难支持,通常需要通过拆分仓库或依赖 GitHub、GitLab 等平台的专有功能。
- 命令设计不直观且不统一
Git 的许多命令在早期设计时功能过于杂糅。例如git checkout 既可以用来切换分支,也可以用来恢复文件。虽然社区后来引入了 git switch 和 git restore 来改善这一问题,但对于习惯了旧教程的用户来说,依然存在一定的混乱。
- 无法原生追踪空文件夹
Git 只追踪文件内容的变动,而不追踪目录结构。无法直接向仓库添加一个空文件夹。通常的变通方法是在文件夹内放置一个名为 .gitkeep 的隐藏文件,这在项目结构管理上显得不够优雅。
- 分支问题
也是最受诟病的,多人协作中可能会导致成员的本地仓库出现严重的同步冲突,往往需要rebase等命令
使用Git的大忌:
- 没什么有价值的修改就提交,也就是没有意义的提交
- 提交到别人的分支
- 提交的代码又引入了新的更严重更明显的bug,也就是不如不提交。比第一条更严重,让别人也无法合并
git init
常常之后,出现下面结果1
2
3
4
5
6
7
8
9提示:使用 'master' 作为初始分支的名称。这个默认分支名称可能会更改。要在新仓库中
提示:配置使用初始分支名,并消除这条警告,请执行:
提示:
提示: git config --global init.defaultBranch <名称>
提示:
提示:除了 'master' 之外,通常选定的名字有 'main'、'trunk' 和 'development'。
提示:可以通过以下命令重命名刚创建的分支:
提示:
提示: git branch -m <name>
可以对分支改名。此时使用git branch无法查看分支,因为还没有任何操作。
在本地建立仓库到push的过程:
1 | git init |
提交会附带消息和一个哈希值,哈希值是一串包含数字和字母的随机序列。
单独 push 某文件
1 | git commit test.cpp |
Commit message 使用的 emoji
初次提交示例:1
git commit -m ":tada: Initialize Repo"
🆕 (全新) :new: 引入新功能
(闪电) :zap: 提升性能
🔖 (书签) :bookmark: 发行/版本标签
🐛 (bug) :bug: 修复 bug
(急救车) :ambulance: 重要补丁
(扳手) :wrench: 修改配置文件
(加号) :heavy_plus_sign: 增加一个依赖
➖ (减号) :heavy_minus_sign: 减少一个依赖
(备忘录) :memo: 撰写文档
(锤子) :hammer: 重大重构
🔥 (火焰) :fire: 移除代码或文件
撤销对文件的修改
对 test.cpp 修改后,打算返回上次提交的状态,使用命令:1
git checkout -- qclipper.cpp
如果要撤销 所有文件 的修改,命令为:1
git checkout -f
git diff ReadMe.mdown 表示在commit之前查看文件修改哪些地方, 在commit之后使用此命令无效。
撤销 commit 的多种方法
那么在执行完 commit 之后,想撤回 commit
1 | git reset --soft HEAD^ |
HEAD^ 意思是上一个版本,也可以写成 HEAD~1 。如果进行了 2 次 commit,都想撤回,可以使用 HEAD~2
撤销 commit、并撤销 git add 操作、不撤销修改代码
1 | git reset --mixed HEAD^ |
1 | git reset HEAD^ |
以上操作将把HEAD指针移动到父提交,但不会改变工作目录中的文件,修改将被保留。
撤销 commit、不撤销git add .
soft
1 | git reset --soft HEAD^ |
撤销 commit、撤销 git add . 操作、撤销修改代码
hard
1 | git reset --hard HEAD^ |
- 这个命令将
HEAD指针移动到当前提交的父提交,并且使用--hard选项会使工作目录中的文件恢复到这个父提交的状态; - 这意味着所有自上次提交以来的未提交的修改都将被删除;
- 如果想保留这些修改,可以使用
git stash命令来保存它们,然后在需要的时候再应用这些修改。
免密码 push的方法
- 使用文件创建用户名和密码
文件创建在用户主目录下:
1 | touch .git-credentials |
记得在真正输入的时候是没有大括号的。
- 添加 git config 内容
git config --global credential.helper store
执行此命令后,用户主目录下的.gitconfig 文件会多了一项:[credential]
helper = store
重新 git push 就不需要用户名密码了。
重命名文件
1 | git mv file.cpp new_file.cpp |
修改commit message
上一次的message如果需要修改,使用:git commit --amend 如果上一次的commit已经push了,那么需要强制提交 git push -f origin master
gitignore
gitignore在本地仓库的根目录,执行文件屏蔽 屏蔽规则
