基本命令
参考:https://nulab.com/zh-cn/learn/software-development/git-tutorial/git-commands-settings/remote-git-commands/
- git config --global user.name “”
- git config --global user.email “”
- git init
- 初始化或add,commit一个文件后会自动创建master分支
- git clone xxx
- git add sample.txt
- git commit -m “mark”
- git status
- git log --graph --oneline // 以图形显示,压缩输出信息
- git remote add origin https://xxx // 创建一个名为origin的远程仓库
- git remote 列出所有远程仓库分支
- git push -u origin master // 将本地仓库中的更改推送到远程仓库的master分支,-u表示下次就不用指明推送的分支,直接git push即可
- git pull origin master
使用标签
- git tag tag1 // 创建一个名为tag1的标签
- git tag // 查看所有标签
- git log --decorate // 查看带有标签信息的历史日志
- 注释
- git tag -am “mark” tag2 // 给标签添加注释,使用-a则在vim中编辑注释信息
- git tag -n // 列出所有标签及其注释
- git tag -d tag2 // 删除标签
管理历史记录
-
修改提交(将修改最近一次提交的文件内容,提交的注释,但是git log显示的时间不变)
- 修改文件
- git add sample.txt
- git commit --amend // 将打开文本编辑器,写注释
-
撤销提交
- git revert HEAD // 撤销最新HEAD提交,git log中能看到撤销的历史记录
-
移除之前的提交
- git reset --hard HEAD~~ // 移除了HEAD的前两次提交,git log中前两次提交记录消失了
- git reset --hard ORIG_HEAD // ORIG_HEAD指向重置之前的原始提交,可以使用该命令来恢复重置
-
将提交复制到不同分支
- git checkout master // 切换到需要其他副本的分支
- git cherry-pick 99daed2 // 在当前分支中使用该命令来复制其他分支中的副本,参数为副本的哈希值,可以使用git log命令查看
- git add sample.txt // 如果发生了冲突,解决之后提交即可
- git commit // 使用git log查看,历史记录中的时间与之前的分支一样,哈希值和注释不一样
-
组合提交 (将后一个提交合并到前一个提交,文件内容不变,只需要修改一下注释)
- git rebase -i HEAD~~ // 进入文本编辑器,处于 rebase-interactive模式,将此时前两个应该都为pick,将第二个pick修改为squash,表示提交第二个但是是与前一个合并的方式,之后编辑组合提交的注释
- 使用git log查看,时间为前一个的,注释为修改之后的
-
修改历史中的某个提交(可以改变历史中某个文件的内容,本次提交的注释,和他后一次提交的注释)
- git rebase -i HEAD~~ // 进入rebase-interactive模式,将要修改的那次提交pick修改为edit,这里为能看到前两次的提交,将第一个pick修改为edit
- 此时会回归到之前那次提交,可以修改文件内容
- git add sample.txt
- git commit --amend // 之后可以修改这次提交后的注释
- git rebase --continue
- 若发生了冲突,解决冲突后添加,继续合并即可
- git add sample.txt // 解决冲突后不需要再次提交
- git rebase --continue
-
组合某个分支中的提交,并合并入主分支中(git log查看,主分支中多了一次合并的历史记录,其他分支中的日志不变)
- git checkout master
- git merge --squash issue1
- 解决冲突
- git add sample.txt
- git commit // 在这里填写这次合并的注释
拉取请求
-
不是git的功能,大多是git托管服务都提供拉取请求。开发人员代码写好后发起拉取请求,审查者查看代码有没有问题,如果有问题则让开发人员修改,没问题则合并分支。
-
步骤
- 在代码仓库中切换到相应的分支,新建一个拉取请求
- 设置要合并的目标分支
- 设置当前分支
- 设置审查者
- 审查者在代码左边可以进行评论
- 开发者看到有关代码错误的评论后,修改代码重新上传
- 审查者觉得没问题后通过审查,最后执行合并到分支即可
- 在代码仓库中切换到相应的分支,新建一个拉取请求
-
合并分支时可能会有冲突(这样不是拉取了一次代码然后重新修改了一遍吗???)
- git pull origin master // 在本地拉取主分支
- 解决冲突 // 使用希望的代码
- git add sort.js
- git commit -m “”
- git push origin add-sort-func // 推送回去即可
分支
- git branch issue1 // 创建分支
- git branch -m main // 将当前分支重命名
- git branch // 列出所有本地分支,*表示当前所在分支
- git branch -r // 列出所有远程分支
- git branch -a // 列出本地和远程所有分支
- git checkout issue1 // 切换分支
- git checkout -b issue1 // 创建分支并切换分支
- 合并分支的两种方式
- 直接合并
- git merge issue1 // 当前分支为master,将当前分支与issue1合并,合并之后解决冲突即可
- git add myfile.txt
- git commit -m “mark”
- 变基
- git rebase master // 当前分支为issue2,将当前分支变基到master,变基之后解决冲突
- git add my file.txt
- git rebase --continue // 解决冲突后恢复变基
- git checkout master // 切换回master分支
- git merge issue2 // 进行快速合并
- 直接合并
- git branch -d issue1 // 删除分支
- git reset --hard HEAD~ // 取消之前的合并
git flow模型
参考:http://wed.xjx100.cn/news/192394.html?action=onClick
理论
-
git flow 是一种关于分支管理的模型,它可以使小组之间的开发相互隔离,使产品在不同的阶段也相互隔离,避免开发混乱和效率低下。
-
该模型的主分支有master,develop,辅助分支有hotfix,release,feature。master分支为生产版本,develop分支为开发版本,hotfix分支用于修复master中的bug,release分支作为develop和master之间的缓冲区,可以进行测试之类的工作,feature分支为功能分支,一个功能完成好后提交给develop分支。
实践
- 想象一个场景:远程有一个代码仓库,仓库中有master分支和develop分支,现在有两个代码开发人员同时准备进行开发。
- 先创建这个仓库和develop分支
# 创建仓库,并连接远程仓库
mkdir git-learning2
cd git-learning2
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/xxx/xxx.git
git push -u origin "master"
# 创建develop分支
git branch develop
git push -u origin develop
- 新的开发人员从远程clone代码仓库并追踪develop分支
git clone https://gitee.com/xxx/xxx.git
git checkout -b develop origin/develop
- 开发新功能时从develop分支创建新的feature分支
git checkout -b feature2 develop
git add xxx.txt
git commit
- 新功能开发完成后将feature分支合并到develop分支并推送到远程仓库
git pull origin develop # 先从远程仓库中拉取,更新develop分支
git checkout develop
git push
git branch -d feature1
- 从develop分支创建release分支准备产品发布
git checkout -b release-0.1 develop # 之后在release分支进行测试等工作
- 发布,即将发布分支合并到master分支
git checkout master
git merge release-0.1
git push
git checkout develop # 记得更新一下develop分支
git merge release-0.1
git push
git branch -d release-0.1
- 对master打上标签
git tag -a 0.1 -m "initial public release" master
git push --tags
- 用户发现bug,从master创建hotfix分支修复bug,修复好后重新合并到master分支和develop分支
git checkout -b hotfix master
git checkout master # 修复好bug之后进行合并
git merge hotfix
git push
git checkout develop # 别忘了更新一下develop分支
git merge hotfix
git push
git branch -d hotfix
.gitignore文件
- 大致可以理解为用正则表达式在里面写要忽略哪些文件,这些被忽略的文件不会被git上传到远程代码仓库
https://blog.csdn.net/nyist_zxp/article/details/119887324
https://blog.csdn.net/weixin_44860226/article/details/129668726