1.什么是git
笼统地讲,git是一个版本控制系统,用户跟踪记录文件的变化,协作开发代码。
2.基本认识
仓库:用来存储项目文件代码和历史的记录。
提交:新增、修改 目录资源状态到仓库。
分支:一个仓库可以有多个分支,用来多人协作,开发新功能,修改bug,同时进行。独立于主线。
合并:将不同的分支修改合并在一起。
3.git最常用的基本命令
git init:初始化一个新的git仓库
git clone [url]:克隆新的git仓库
git add [file]:将文件的当前状态添加到暂存区。
git commit -m "message":将暂存区的改动提交到仓库。 (一定要先pull,获取远程仓库最新代码)
git push:将本地提交推送到远程仓库。
git pull:从远程仓库拉取最新修改到本地。
git branch test:创建test分支
git checkout test:切换到test分支
git checkout -b test:创建test分支并且切换到test分支
举例:常用的分支合并【目标:将feature分支合并到test分支】
1.merge方式
①切换到test分支
git checkout test
②在test分支执行git merge feature
(如果有冲突,需要手动解决冲突)
③推送代码到远程仓库git push
【优点:1.简单直接。2.合并保留了每个分支的历史记录,可以清晰地追踪每个分支的变化。】
【缺点:产生额外的合并提交,合并可能会导致复杂的分支结构和困难的代码整合问题】
2.主分支使用rebase方式【一般不介意在主分支使用rebase】
①切换到test分支
git checkout test
②开始rebasegit rebase feature
③如果有冲突需要手动解决冲突,解决后将修改的文件标记为已解决git add <resolved_file>
④继续rebasegit rebase --continue
⑤可能需要强推到远程仓库git push -f
【优点:整洁的提交历史,直接是一条线】
【缺点:可能会改变提交历史,共享的分支上进行rebase,可能会对其他开发者造成困扰】
3.特性分支rebase+主分支使用merge
①切换到特性分支feature分支
git checkout feature
②开始rebasegit rebase test
③可能会有冲突,解决后执行git add <resolved_file>
④继续rebasegit rebase --continue
⑤强推送代码到featuregit push -f
⑥切换到test分支git checkout test
⑦执行merge合并到testgit merge feature
⑧推送代码到远程仓库git push
【优点:整洁的提交历史,直接是一条线。不会改变主分支提交历史线】
【缺点:不会保留特性分支的提交历史记录,】
---注意:如果test分支有其他功能的代码,该代码整合到feature上,合并到master分支时也会将test分支其他功能代码合并到master分支--------
4.主分支使用cherry-pick
①切换到test分支
git checkout test
②test分支执行cherry-pick git cherry-pick <commit-hash1> <commit-hash2>
【commit-hash* 为特性分支提交的commit ID】
③test分支执行 git push
-----注意:
1.如果<commit-hash*> 有连续的多个commit,test分支可使用:
~ 不包含start-commit-hash git cherry-pick <start-commit-hash>..<end-commit-hash>
~ 包含start-commit-hash git cherry-pick <start-commit-hash>^..<end-commit-hash>
2.如果特性分支有很多个commit,可以执行rebase合并多条commit,修改为1条commit。test分支cherry-pick合并后的commit
命令行使用rebase合并多条commit
①所在分支 执行
git rebase -i HEAD~n
, n是你想要合并的 commit 数量。这会打开一个交互式 rebase 窗口。
②在交互式窗口中,【需要按 i 键,打开编辑模式才能修改】将要合并的commit 前面的pick单词改为 "squash" 或 "s"。【最顶端的commit保留pick单词,下面的几个commit 改为s】
③编辑后按ESC退出编辑,英文状态输入:wq
,按回车。关闭编辑器。此时会重新弹出第二个编辑器。
④【需要按i键,打开编辑模式】修改合并后新的commit信息,按Esc键退出编辑,输入:wq
,按下“回车”,退出编辑器。
⑤执行git push -f
强推