Git
参考
- 廖雪峰 https://www.liaoxuefeng.com/wiki/896043488029600/897889638509536
- https://mp.weixin.qq.com/s/caVfg8qCRjSiogD-jitIeA
- https://mp.weixin.qq.com/s/XcmrClMqqTWoDIDitXEcmQ
- https://learnku.com/articles/22068
简易的命令行入门教程
Git 全局设置:
1 | git config --global user.name "张三" |
创建 git 仓库:
1 | mkdir test |
已有仓库?
1 | cd existing_git_repo |
入门
一、安装 Git
首先,确保你的计算机上安装了 Git。你可以访问 Git 官网 下载对应操作系统的安装包。
二、基本配置
安装完成后,打开终端或命令行,配置你的用户信息,这将用于你提交时的作者身份:
1 | git config --global user.name "你的名字" |
三、创建与初始化仓库
本地新建仓库:在项目目录下,运行以下命令初始化一个新的 Git 仓库:
1
git init
克隆现有仓库:若要从远程仓库克隆到本地,使用:
1
git clone https://github.com/用户名/仓库名.git
四、工作流程基础
Git 的工作流程主要包括以下几个步骤:
- 工作目录:你编辑文件的地方。
- 暂存区(Index):通过
git add
命令,将修改过的文件放入暂存区,准备提交。 - 提交:使用
git commit
将暂存区的快照永久保存到版本库中。
添加文件到暂存区:
1
git add 文件名
或添加所有修改过的文件:
1
git add .
从暂存区删除文件
1
git rm --cached filename
提交到仓库:
1
git commit -m "提交信息"
五、分支管理
Git 强大的分支管理能力是其核心特性之一。
创建并切换到新分支:
1
git checkout -b 分支名
列出所有分支:
1
git branch
合并分支:
先切换回主分支,然后:
1
git merge 分支名
删除分支:
1
git branch -d 分支名
六、版本回退
查看提交历史:
1
git log
回退到某一版本:
通过 commit id 回退:
1
git reset --hard commit_id
七、解决冲突
当合并分支时遇到冲突,Git 会标记冲突文件,需要手动编辑解决冲突,然后再次提交。
八、远程仓库操作
添加远程仓库:
1
git remote add origin 远程仓库地址
推送本地分支到远程仓库:
1
git push -u origin 分支名
拉取远程仓库更新:
1
git pull origin 分支名
九、高级技巧
stash:临时保存工作现场,用于切换分支前快速清理工作目录:
1
git stash
重置:撤销提交,
--soft
仅移动HEAD,--mixed
移动HEAD并恢复暂存区(默认),--hard
移动HEAD并丢弃工作目录的改动:1
git reset --hard HEAD^
cherry-pick:选择性地应用另一个分支的某次提交到当前分支:
1
git cherry-pick commit_id
命令
1 | git init |
git commit
只负责把暂存区的修改提交git diff HEAD -- readme.txt
命令可以查看工作区和版本库里面最新版本的区别git checkout -- file
可以丢弃工作区的修改,让这个文件回到最近一次git commit
或git add
时的状态git reset HEAD <file>
或git reset HEAD -- 目录
可以把暂存区的修改撤销掉(unstage),工作区不变- 提交后删除,发现删错了,可以
git checkout -- file
恢复最新版本 - 已经提交了不合适的修改到版本库时,想要撤销本次提交,可以
git reset --hard HEAD^
- 先手动删除文件,然后使用
git rm file
和git add file
效果是一样的
分支
查看分支:
git branch
创建分支:
git branch <name>
修改分支名称:
git branch -m oldname newname
切换分支:
git checkout <name>
创建+切换分支:
git checkout -b <name>
合并某分支到当前分支:
git merge <name>
删除分支:
git branch -d <name>
解决冲突:编辑冲突文件,再提交
禁用
Fast forward
模式合并,即普通模式合并,合并是一次 commit,有历史记录1
git merge --no-ff -m "merge with no-ff" dev
实际开发分支策略
Bug 分支 stash
保存工作现场 「当前在
dev
分支」1
git stash
切换到
master
分支1
git checkout master
创建并切换至修复 bug 分支
1
git checkout -b issue-101
修复完成后,切换到
master
分支,并完成合并,最后删除issue-101
分支1
2
3git checkout master
git merge --no-ff -m "merged bug fix 101" issue-101
git branch -d issue-101切换回
dev
分支,继续干活1
git checkout dev
查看工作现场
1
git stash list
恢复现场并删除 stash
1
2
3
4
5方式一:
git stash apply
git stash drop
方式二:
git stash pop多次 stash,恢复的时候,先用
git stash list
查看,然后恢复指定的stash1
git stash apply stash@{0}
Feature 分支
开发一个新 feature,最好新建一个分支
如果要丢弃一个没有被合并过的分支,可以通过
git branch -D <name>
强行删除
抓取分支
从远程库
clone
时,会把仓库所有分支代码都会下载到本地,但默认只显示master
分支可以通过
-b dev
默认显示dev
分支1
2
3git clone https://github.com/wangwenzhe/test.git
git clone -b dev https://github.com/wangwenzhe/test.git本地显示并切换至 dev 分支
1
git checkout -b dev origin/dev
推送分支
查看远程库的信息
1
2git remote
git remote -v添加远程库
1
git remote add origin https://github.com/wangwenzhe/test.git
删除本地的远程库配置
1
git remote rm origin
推送分支
1
2
3//把指定分支推送到远程库对应的分支上
git push origin master
git push origin dev强制推送
1
git push -u origin master -f
多人协作的工作模式
- 首先,可以试图用
git push origin <branch-name>
推送自己的修改 - 如果推送失败,则因为远程分支比你的本地更新,需要先用
git pull
试图合并 - 如果合并有冲突,则解决冲突,并在本地提交
- 没有冲突或者解决掉冲突后,再用
git push origin <branch-name>
推送就能成功 - 如果
git pull
提示no tracking information
,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name
贡献代码的步骤
- 在 Gitee 或者 Github 上 fork 项目到自己的 repo
- 把 fork 过去的项目也就是你的项目 clone 到你的本地
- 修改代码(记得一定要修改 v5-dev 分支)
- commit 后 push 到自己的库(v5-dev 分支)
- 登录 Gitee 或 Github 在你首页可以看到一个 pull request 按钮,点击它,填写一些说明信息,然后提交即可。
- 等待作者合并
忽略提交控制
.gitignore
文件
1 | HELP.md |
问题
无法删除远程分支
情况一:当前分支为默认分支
解决:仓库配置,默认分支改为 master
情况二:分支受保护,无法删除
解决:仓库配置,Protected Branches 删除保护记录