因为工作需要记录下Git的用法,主要是Git命令行的操作和对Git版本控制器的一些粗浅理解;
本文包括:
Git常识
版本回退
分支合并
使用Github
处理版本冲突
关于Git的几个概念
首先Git是分布式的,没有中央服务器的概念(Github是远程仓库和本地仓库平级);
工作区:
包含.git(版本信息)目录目录的文件夹,也就是项目根路径;
版本仓库:
记录版本变动信息的一系列指针文件夹(.git),一般情况不要修改;
暂存区:
在版本库中,add但未commit的信息保存在stage区;
1. 身份配置
git config --global user.name "example"
git config --global user.email "[email protected]"
#这两条命令之后,会在用户主目录~\.gitconfig文件中添加全局user.name和user.email;
可以使用git config user.name|user.email查看;
生成密钥:这是用于和github数据传输加密
ssh-keygen -t rsa -C "[email protected]" #然后Enter选择默认文件保存私钥,系统会还会提示输入两次git密码用于保护密钥;
完成后会在~\.ssh中生成两个文件,一个是私钥默认名为id_rsa,一个是公钥默认名为id_rsa.pub;
打开公钥,复制其内容,选择你的github账号:setting/SSH and GPG keys/new SSH key把复制的内容copy到Key文本中,Title则是用于区别的标题;
2. 创建版本库(repository)
git init #对本目录添加.git版本记录
3. 提交改动
git diff test.txt #对比磁盘文件(工作区)和版本库中文件区别
git staus #查看状态
提交需要的两次连续操作{
git add *.txt #先添加到stage缓存区
git commit -m "c" #再提交stage缓存区到本地仓库
}
4. 版本回退
git log [--pretty=oneline] #查看提交log[单行显示]HEAD栈
git reflog #查看所有log(含回退与提交)
git reset --hard 版本号|HEAD^^|HEAD~5 #切换到 版本x|HEAD栈顶-2|HEAD栈顶-5
没有Commit的改动撤销:
git check -- test.txt #对于删除和修改 撤销到缓存区状态(add过) 或 仓库当前版本状态
git clean -fd #删除新建文件夹和文件
5. 使用分支(分支可以理解为命名空间)
git branch #查看分支
{
git branch dev #创建分支
dev git checkout dev #切换到dev分支;
}git checkout -b dev #创建并切换到
devgit merge dev #合并dev分支到当前分支
git branch -d dev #删除dev分支
git merge --no-ff -m "merge note" dev #不使用默认的Fast-forward模式合并,分支dev删除后还保留合并记录
git log --graph --pretty=oneline --abbrev-commit #查看提交log(含合并信息)
*合并时冲突
对于合并发生无法自动合并的冲突,文件中会列出:
<<<<<<< HEAD
#当前分支部分
=======#
其他分支部分
>>>>>>> dev
需要手动处理后,对文件进行一次提交操作(add+commit);
*保留现场(分支不提交切换)
git stash #隐藏工作现场
{
git apply #恢复现场
git stash drop #删除stash
}stash git stash pop #恢复并删除stash
6. 远程仓库
git clone https://github.com/Excample-GitHub/Demo.git #克隆并关联本地和远程仓库
git pull #下载最新版本 下载master分支
git push #上传本地仓库 推送master分支
git remote -v #查看所有远程仓库
git remote add origin2 https://github.com/Abraham-GitHub/GitTest.git #添加远程仓库
git push [-u] origin2 master #提交master分支到远程元仓库(第一次提交需 -u 参数,提交并关联)
*冲突处理
a. 尝试git push
b. git pull 更新版本
c. 处理冲突[参考 *合并时冲突]
d. 再次 git push
*分支关联(一般只需保持master分支提交和更新)
git push origin2 dev #推送本地dev分支 到 远程dev分支(不存在则创建)
git checkout –b dev origin2/dev #下载dev分支的最新版本到本地(的新建dev分支)
git branch --set-upstream-to origin2/dev dev #关联服务器origin2的dev分支和本地dev分支
Ps:设置upstream后切换到dev分支后可以进行git pull/push操作,因为分支已经关联
本文使用的git工具来自:https://git-scm.com/download/