文章目录
Git常用操作总结
1 Git基本概念
- Repository(仓库):用于存放项目代码,每个项目对一个仓库
- Fork(复制克隆项目):该fork的项目是独立存在的
- Pull request (发起合并请求):fork项目,修改自己仓库的项目代码,新建pull request,等待作者操作(合并)
- Watch(关注项目):可以接收到项目更新提醒
- Issue(事务卡片):发现代码bug,但目前没有成型代码,需要讨论时可用
2 本地仓库管理
(1)安装Git并设置用户环境
sudo apt-get install git //安装Git
git config --global user.name 'yourusername' //设置用户名
git config --global user.email 'youruseremail' //设置用户名邮箱
git config --list //查看用户信息
sudo gedit ~/.gitconfig
(2)获得仓库
mkdir foldername //创建仓库文件夹
cd foldername //进入文件夹
git init //git初始化
git clone URL //下载远程仓库
(3)文件操作
- 创建文件
touch filename(a1.php) //创建文件到工作区
git add filename //添加文件到暂存区
git commit -m 'git add filename' //提交(快照)文件到仓库,git add filename'为上传文件的说明
git push //上传到远程仓库;注意:若在网页对仓库进行修改操作后,再从本地仓库上传文件到远程仓库,需要先“git pull”.
- 修改文件
//首先在工作区修改文件
git status //查看状态,非必须
git diff //查看修改内容,非必须
git add filename //添加修改文件到暂存区
git commit -m 'git add filename' //提交(快照)文件到仓库,git add filename'为上传文件的说明
//若出现错误修改
git checkout -- filename //撤销工作区的修改,让这个文件回到最近一次git commit或git add时的状态
git reset HEAD //清除暂存区内容
- 删除文件
rm filename //在工作区删除文件
git rm filename //提交删除文件到暂存区
git commit -m 'remove filename' //在仓库删除文件
(4)版本管理
git log //查看当前版本及其之前的各版本ID和信息
git reflog //查看全部的提交和版本切换操作,及操作后对应的版本ID
git reset --hard HEAD^ //切换到前一个版本;HEAD^、HEAD^^、...、HEAD~100
git reset --hard version_id //切换到指定ID的版本
3 远程管理
(1)预备工作
//1 注册github账号,得到用户名和账户名
//2 本地设置ssh,将用户家目录.ssh文件夹下id_rsa.pub文件中的内容添加到GitHub上
ssh-keygen -t rsa -C "youremail@example.com"
(2)本地仓库关联远程仓库
//1 建立本地仓库(新建文件夹)
git init
//2 为本地仓库设置用户名和账户名
git config --global user.name 'yourusername' //设置用户名
git config --global user.email 'youruseremail' //设置用户名邮箱
//3 GitHub上新建仓库
//4 本地仓库与远程仓库建立关联
git remote add origin git@github.com:michaelliao/learngit.git
//5 本地仓库于远程仓库保持一致
git pull origin master [--allow-unrelated-histories]
//6 本地仓库上传到远程仓库
git push origin master
(3)本地仓库克隆远程仓库(推荐)
//在GitHub上新建仓库
//在本地克隆远程仓库
git clone git@github.com:tianyuchena/DataStructuresAndAlgorithms.git
//查看远程仓库信息
git remote //有哪些远程仓库
git remote -v //查看远程仓库详细信息
//同步分支
git push origin master
git push origin dev
(4)使用代理与取消代理
git config --global http.proxy http://127.0.0.1:1080
git config --global https.proxy http://127.0.0.1:1080
git config --global --unset http.proxy
git config --global --unset https.proxy
4 分支管理
(1)创建、切换、合并、删除分支
//1 创建分支dev
git branch dev
//2 切换到dev分支,1和2可合并为:git checkout -b dev
git checkout/switch dev
//查看当前分支情况
git branch
//3 合并dev分支到master分支
git checkout master //首先切换到master分支
git merge --no-ff -m 'merge dev' dev //然后执行合并分支操作,--no-ff参数表示禁用Fast forward
git branch -d dev //最后,可以删除dev分支
(2)修复Bug
//1 当前在dev分支,若工作若还没做完(不能提交),则把当前工作现场存储起来
git stash
//2 切换到需要修复Bug的分支(假设是master)
git checkout master
//3 新建一个Bug分支来修复Bug(假设Bug编号是101)
git checkout -b bug-101
... //修复Bug过程
//4 修复Bug后合并到master分支并删除Bug分支
git checkout master
git merge --no-ff -m 'merge bug fix bug-101' bug-101
git branch -d bug-101
//5 回到dev分支,并在dev分支修复Bug
git checkout dev
git cherry-pick <commit> //commit ID可以是bug-101或master的,git log查看
//6 恢复工作现场
git stash list //查看stash内容
git stash apply //恢复工作现场,但stash内容不删除
git stash drop //删除stash内容
git stash pop //恢复工作现场,同时删除stash内容
(3)开发feature
//开发一个新feature,最好新建一个分支
//如果要丢弃一个没有被合并过的分支,可通过以下命令强行删除
git branch -D <name>
(4)多人协作遇到冲突
请参考:多人协作遇到冲突
5 标签管理
//用于新建一个标签,默认为HEAD
git tag <tagname> [commit id]
//新建标签并添加标签信息,默认为HEAD
git tag -a <tagname> [commit id] -m "blablabla..."
//删除本地标签
git tag -d <tagname>
//查看所有标签
git tag
//查看某个标签详细信息
git show <tagname>
//推送标签到远程
git push origin <tagname>
//一次性推送全部尚未推送到远程的本地标签
git push origin --tags
//删除远程标签
git tag -d v0.9 //先删除本地标签
git push origin :refs/tags/v0.9 //再删除远程标签