查看哪些配置
创建仓库
Add和commit使用和含义
工程重命名
mv README README.md 将文件重命名
git add README.md 添加重新命名的文件到缓存区
git rm README 删除在缓存区的README文件
git reset --hard清理暂存区的文件
因此最便捷的修改文件名的方式为git mv suling.txt su.txt
多种查看日志的方法
git log --oneline查看日志仅显示一行基本信息
git log -n2 --oneline #n2表示2行数据
git checkout -b temp feature-1101 # 创建分支temp,从feature-1101分支copy过来的
git checkout feature-1101 # 切换到feature-1101分支
git branch -d temp # 删除本地分支
git branch -av # 查看所有远端分支和本地分支
commit、tree和blob三个对象之间的关系
git cat-file -p 4cff736a3a97 # 查询指定文件的内容,可以包括但不限于tree,parent,author,committer
git cat-file -t 4cff736a3a97 # 查询指定文件的类型
find .git/objects -type f # 查看当前工程的git当中的提交记录
2棵tree,1个blob
分离头指针
所写的内容一定要与某个分支绑定在一起,不然后续会被git当作垃圾处理掉。
git diff HEAD HEAD^1 #比较Head和Head的父亲HEAD^1之间的差异,HEAD^^1父亲的父亲,也可以使用HEAD~2表示父亲的父亲
删除分支
git branch -d 分支名
git branch -D 分支名 #强制删除内容
修改最新commit的message
git commit --amend
修改老旧的commit的message
git log -3 # 查看最新的3行日志
git rebase -i 要修改的commit的父节点
连续的多个commit被合并
git rebase -i 要修改的commit的父节点
然后将子节点都使用squash进行修改
非连续的多个commit被合并
git rebase -i 要修改的commit的父节点
将间隔的拉到需要合并的父节点下
暂存区与HEAD之间的差异
修改某个文件
git add 修改的文件
git diff --cached
工作区和暂存区所含文件的差异
git diff # 直接比较的就是工作区和暂存区的差异
git diff -- 文件名 #指定文件进行比较
Git中的‘HEAD’是什么?
git 恢复文件到初始状态的命令:
$ git reset HEAD file>
git 展示提交日志命令:
$ git log commit c4f9d71863ab78cfca754c78e9f0f2bf66a2bd77 (HEAD -> master)
在这些命令中常常会看到HEAD这个名词,它指的是什么呢?
回答
这要从git的分支说起,git 中的分支,其实本质上仅仅是个指向 commit 对象的可变指针。git 是如何知道你当前在哪个分支上工作的呢?
其实答案也很简单,它保存着一个名为 HEAD 的特别指针。在 git 中,它是一个指向你正在工作中的本地分支的指针,可以将 HEAD 想象为当前分支的别名。
HEAD 指向当前所在的分支——master
所以,
- git reset HEAD 指的是恢复到当前分支中文件的状态。
- git log 日志展示中HEAD -> master指的是:当前分支指向的是master分支。
工作区恢复到暂存区文件
git checkout -- 文件名 # 将工作区内容恢复到暂存区的内容
git diff --cached # 查看工作区与暂存区的差异
取消暂存区部分文件的修改
git reset HEAD -- 文件名 # 指定文件暂存区取消修改,实际是从版本库重新拉一份到暂存区,再用git checkout -- 文件名 的方式拉取到本地
git reset HEAD # 恢复暂存区所有文件
消除最近的几次提交
git reset --hard 某一次commit # 该次commit之后的提交都会删除
不同提交的指定文件的差异
git diff 分支名1 分支名2 # 查看2个分支的不同
git diff 分支名1 分支名2 -- 文件名 # 查看2个分支中某一个文件的不同
正确删除文件的方法
git rm 文件名称
开发中临时加塞了紧急任务
git stash # 保存当前任务
git stash list # 查看被保存的任务列表
git status # 查看状态即可发现不同
git stash apply # 跳转到被保存的任务
git reset --hard HEAD^ # 消除最近的一次commit(有几个^就撤回几次)
git stash pop # 弹出最近保存的任务,并将保存记录删除
指定不需要Git管理的文件
https://github.com/github/gitignore下有gitignore的示例文件
.gitignore中添加doc,表示doc的文件和doc文件夹下的文件都被忽略,如果doc/是文件夹被忽略
将Git仓库备份到本地?
git clone --bare 原文件夹 目标文件夹或文件 # 不带工作区的克隆?
配置公私钥(这样就不需要用户名的账户密码)
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" #后面一路回车
id_rsa私钥,id_rsa.pub公钥
本地与远端建立链接
远端有仓库,本地连接远端仓库,不适用git clone
git init
git remote add origin https://github.com/417685417/91video.git #连接远程仓库并将远程仓库取别名为origin
git push origin master #将本地master分支的内容上传到远程仓库
git pull origin master # 从远端拉取内容到本地
git pull 相当于git fetch + merge
git fetch 本地工程名(连接remote时候指定如上就是origin) 远端工程名 # 仅仅是从远端拉去不合并
git merge github/master # 当前分支融合远端github/master仓库
git merge -h #查看使用文件信息
不同人修改不同文件如何处理
git clone https://github.com/417685417/91video.git git_learning # 本地新的仓库名git_learning,可以包含多个人连同一个远端仓库
git config --add --local user.name 'sunmj'
git config --add --local user.email 'sunmj@91360.com'
git config --local -l #查看当前仓库的信息
git checkout -b feature/add_git_commands origin/feature/add_git_commands # 将远端的仓库克隆到本地,然后切换至该分支
修改文件内容,之后提交
git commit 'add message in readme'
git push
git fetch github #这是由于远端的仓库名就叫github,这里注意fetch只是将远端拉去下来,但是在本地没有新建分支或者合并
git merge github/feature/add_git_commands # 将拉去下来的内容合并到当前分支内
其中fetch+merge等于pull的操作。
git checkout -b feature/add_git_commands github/feature/add_git_commands # 本地新建分支然后切换至该分支
git add -u # 当前修改添加到暂存区
git commit -m 'message'
git push
不同人修改了同文件的不同区域
不同人修改了相同文件后,都使用了commit,此时当有人想要push时,会报错,因为出现了2个修改,这2次的commit在远端的gitlab已经获取到,所以此时需要解决方该冲突,一般先
git fetch
git merge
也就是先拉取合并再提交push
不同人修改了同文件的同区域
第一个人修改了某个文件的某个区域,并提交
第二个人修改了相同文件的相同区域,并提交
第二个人想要push他的代码,这时候会报错。
一般这个时候是git merge origin/xxx 来将远端代码和本地合并,这时候会报错,因为修改了同一地方吗,那这时候merge已经把冲突的内容都放到同一个文件里了,这时候就需要人工手动修改冲突文件,两人商量后决定具体冲突的修改。
git status就能看当前分支的状态,并提示你如何操作。
git commit -am'Resolved conflict by hand with 4 git commads'
git push github
同时变更了文件名和文件内容
正常的pull,commit,push就行了,git会自动帮我们做这些修改。
同一文件被不同人修改成不同文件名
提交和push的时候,会保存修改后的2个文件,然后按照提示,删除原始文件,然后git add 新文件名1,git rm 新文件名2,然后git commit -av'xxxxx', git push
禁止向集成分支执行push -f操作
例如恢复早期的一个commit:
git reset --hard xxxx编号
git reset --hard HEAD^ 表示回退到上一个版本
git push -f origin feature/add_git_commands # -f表示强制执行提交操作
结果:导致所有xxxx编号之后的commit都消失了。
禁止向集成分支执行变更历史的操作(也称作变基操作)
同事是基于之前某个commit拉取下来的操作,当你修改commit历史后,主分支的commit就变了,那同事基于的那个commit与当前最新的分支就不一致,会引发麻烦。
怎么快速淘到感兴趣的开源项目
advanced options
搜索条件:git 最好 学习 资料 这种搜索到的内容相关度很小
git 最好 学习 资料 in:readme stars:>1000 filename:gitlab-ci
'after_script:'+'stage:deploy' filename:gitlab-ci
blog easily start in:readme stars:>5000