Git
Git是一种分布式版本控制系统,与集中式版本控制系统不同,Git的分布式特性意味着每个开发者的工作站都有一个完整的代码库和历史记录,如果中央服务器发生故障,任何克隆了仓库的开发者都可以用自己的副本来恢复数据。
概念
仓库(Repository)
- 本地仓库:位于开发者的个人计算机上,包含所有的历史记录和版本信息,在离线状态下也可以工作;
- 远程仓库:位于网络服务器上,如 GitHub、GitLab 或 Bitbucket。
文件状态
状态 | 关联区域 | 含义 |
---|---|---|
已修改 | 工作目录 | 修改了文件,但还没有保存到本地数据库暂存区中 |
已暂存 | 暂存区 | 标记修改的文件为准备提交的状态,已暂存的文件会被包含在下一次提交操作中; 在最终提交前,可以继续修改文件并再次暂存 |
已提交 | Git仓库 | 文件已经提交,作为一个快照保存在Git仓库中 |
常用命令
git add [file] | 将新创建的或修改过的文件添加到暂存区 |
git add . 或 git add -A | 将仓库中所有未跟踪和修改过的文件添加到暂存区 |
git checkout -b [本地分支名] | 基于当前分支,创建新的分支 |
git checkout -b [本地分支名] -t origin/[远程分支名] | 基于远程分支创建新的本地分支,可以自动跟踪指定的远程分支 |
git cherry-pick [commit-hash] | 选择某个分支的[commit-hash]提交应用到当前分支; 如果选择多个提交,不同提交之间用空格隔开。 |
git rebase -i HEAD~N | 变基:处理最近的N次提交,可以压缩到前一个提交、也可以丢弃 |
常用功能
git cherry-pick
- 冲突:如果发生冲突,需要手动解决。解决后,使用 git cherry-pick --continue 来继续提交
- 需要谨慎使用:使用 cherry-pick 可能导致分支历史混乱,尤其是当被选择的提交依赖于其他未被选择的更改时
功能区分
git fetch 和 git pull 的区别?
git pull = git fetch + git merge FETCH_HEAD
功能 | |
---|---|
git fetch | 下载远程仓库更改到本地,不会自动合并 |
git pull | 下载远程仓库更改到本地,并合并到当前分支中 |
git merge 和 git rebase 的区别?
工作方式 |