此处记录笔者在学习Git上遇到的坑以及相关的学习笔记,留备日后避坑。新手上路,高手轻喷…
基本操作
跨团队协作
fork //复制他人远程库到自己远程库上
git clone
git push
pull request //拉取请求 >> 审核 >> merge 合并
设置签名
作用:区分不同开发人员的身份
这里设置的签名和登陆远程库(代码托管中心)的账号密码没有任何关系
命令:
项目级别/仓库级别:仅在当前本地哭范围内生效(二者都有时优先采用)
git config user.name username
git config user.email email
信息保存位置:本地库/.git/config
系统用户级别:登陆当前操作系统的用户范围
git config --global user.name username
git config --global user.email email
信息保存位置:~/.gitconfig
版本前进和后退
git reflog
黄色字段为部分哈希值(也是下面的索引值)
HEAD@{移动到当前版本需要多少步}
-
基于索引值操作[推荐]
git reset --hard 局部索引值
-
使用^符号:只能后退
git reset --hard HEAD^ //往前回滚一个版本
git reset --hard HEAD^^ //往前回滚两个版本
-
使用~符号
git reset --hard HEAD~num //num为回退的步数
reset命令的三个参数对不
--soft
- 仅仅在本地库移动指针
--mixed
在本地库移动HEAD指针
重置缓存区
--hard
- 在本地库移动HEAD指针
- 重置暂存区
- 重置缓存区
删除文件并找回
删除前,文件存在时的状态提交到了本地库
-
操作:git reset --hard [指针位置]
删除操作已经提交到本地库:指针位置指向历史记录
删除操作尚未提交到本地库:指针位置使用HEAD
比较文件
-
和暂存区进行比较:git diff [files]
-[Red]
+[Green]
和本地上个版本进行比较:git diff [本地库历史版本] [files]
不带文件名可以比较多个文件:git diff
分支操作
创建分支:git branch [分支名]
查看分支:git branch -v
切换分支:git checkout [分支名]
-
合并分支:
第一步:切换到被合并的分支上:git checkout [被合并的分支名]
第二步:执行merge命令:git merge [另一个分支名]
-
解决冲突:
第一步:编辑文件,删除特殊符号
第二步:把文件修改到满意的程度,保存退出
第三步:git add [文件名]
第四步:git commit -m "日志信息" (此时commit一定不能带文件名)
克隆
- 完整的把远程库下载到本地
- 创建origin远程地址别名
- 初始化远程库
- 命令:git origin [远程库地址]
拉取
pull=fetch+merge
常用
git init //初始化本地库,并生成.git文件夹
git add <file> //添加到暂存区
git commit //添加到本地库
git status //查看状态
git checkout -- <file> //从暂存区撤销工作区的修改
git reset HEAD <file> //从暂存区内删除该文件
git commit -m "commit message" <file> //提交到库上,并提交信息
git log //多屏查看历史版本记录。空格翻页、b向上翻页、q退出
git log --pretty=oneline //历史版本以每条一行的方式呈现
git log --oneline //历史版本以每条一行的方式呈现并只截取部分哈希值(仅显示当前版本的历史版本)
git reflog //在--online基础上出现HEAD@{num}(显示历史版本)
git help (command) //command为具体命令,可以查看该具体命令的文档
git branch -v //查看分支
git branch [new-branch] //创建一个名为new-branch的新分支
git checkout [branchname] //切换分支
git remote -v //查看远程库
git remote add [别名] [仓库远程地址] //设定远程库信息
git push [远程库别名] [分支名] //将本地库信息推送到远程库
git clone [仓库远程地址] //克隆远程仓库到本地
git fetch [远程库别名] [分支名] //将远程库信息拉取到本地,但没更改本地工作区的文件
git checkout [远程库别名]/[分支名] //切换到拉取的本地
git merge [远程库别名]/[分支名] //将拉取的本地内容合并到工作区
git pull [远程库别名] [分支名]= git fetch+git merge
别人的笔记: