最近在网上发现了个git闯关的游戏,link.,因为自己平时做项目用的都是git,但都是些最基本的,于是要写篇博客记录一下,省得以后再找。
- 初始化一个git仓库。
git init
- 设置/查看git配置的用户名和邮箱
git config --global user.name [用户名]
git config --global user.eamil [邮箱]
- 添加文件到仓库
git add [文件名]
- 提交文件到仓库
- git comit -m '提交的说明'
- 克隆项目
git clone 项目地址
- 忽略文件,让特定文件不受版本控制
1.忽略指定文件类型结尾的文件
在.gitignore里编辑 添加一行*.swp,add并且commit后,版本仓库会忽略掉以*.swp结尾的文件
2.忽略以.a结尾的文件,但是不忽略lib.a这个文件
- 查看暂存区的状态
git status
用git status命令查看工作区状态,有三个状态:
Changes to be committed: 要提交的更改。
Changes not staged for commit:未提交的更改。
Untracked files: 没有跟踪的文件。
- 从暂存区/分支上删除文件,并且本地也删除该文件
git rm <file>
- 删除暂存区或分支上的文件, 但本地又需要使用, 只是不希望这个文件被版本控制,
git rm --cache <file>
- 隐藏当前工作
git stash
- git重命名文件
git mv oldfile newfile
- git移动文件到指定文件夹
git mv file folder
- 查看提交的日志
git log
- 给git打个标签
git tag '标签名'
- 查看所有标签
git tag
- 切换到某个标签
git checkout <tagname>
- 把标签推送到远程仓库
git push origin [tagnema] (推送单个标签)
git push origint --tags (推送所有标签)
- 合并缓存区的修改和最近的一次commit, 然后用生成的新的commit替换掉老的. 如果缓存区没有内容, 那么利用amend可以修改上一次commit的描述.
git commit --amend
- 修改提交时间
linux上date命令 https://www.cnblogs.com/ginvip/p/6357378.html
git commit --date <date>
- 回退某个提交
git reset HEAD <file>
#回退所有内容到上一版本 HEAD^的意思是最近一次的提交
git reset HEAD^
#回退a.py这个文件的版本到上一个版本
git reset HEAD^ a.py
#向前回退到第3个版本
git reset --soft HEAD~3
#回退到上一个版本
git reset --soft HEAD^
#将本地的状态回退到和远程的一样
git reset --hard origin/master
#回退到某个版本
git reset 38679ed
#回退到上一次提交的状态,按照某一次的commit完全反向的进行一次commit
git revert HEAD
- 撤销某个文件的修改
git checkout -- <file>
- 列出所有的远程分支
#列出所有的远程分支,只显示分支名
git remote
#列出所有的远程分支,显示克隆地址
git remote -v
- 从远程分支拉取代码
git pull origin master
- 添加一个远程仓库地址
git remote add [shortname] [url]
- 把一个分支的修改合并到当前分支
git rebase [branchName]
- 上传本地代码分支到master分支
git push origin master
- 比较文件
#比较暂存区与最新本地版本库
git diff <file>
#比较工作区和最新版本
git diff HEAD <file>
#比较工作区与指定的 commit -id 的差异
git diff commit-id <file>
#比较暂存区与指定 commit-id 的差异
git diff --cached commit-id <file>
#比较两个 commit -id 的差异
git diff commit-id commit-id
- 查看文件的每个部分都是谁修改的
git blame <file>
#指定行数,从第一行到第十行
git blame -L 1,+10 <filename>
- 分支管理
#查看所有分支
git branch
#创建一个分支
git branch <branchname>
#切换到某个分支
git checkout <branchname>
#切换到某个标签
git checkout <tagname>
#切换到某个标签,但已有分支名与标签名一样
git checkout tags/<tagname>
#在某个分支的上一个版本上新建分支
git checkout <branchname> HEAD^1
或者
git log
git checkout <branchname> -v 第二条id的前七位
#删除分支
git branch -d <branchname>
- 分支推送
#将本地的master分支推送到origin主机的master分支
git push origin master
#如果当前分支与远程分支直接存在追踪关系,则本地分支和远程分支都可以省略
git push origin
#如果当前分支只有一个追踪分支,那么主机名都可以省略
git push
#不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机。
git push --all origin
- 合并分支
git merge <branchname>
- 拉取远程仓库的代码
git fetch
关于git pull 和 git fetch的区别,这位博主介绍的很详细https://blog.csdn.net/weixin_41975655/article/details/82887273
- rebase的使用
#合并master分支上的代码到当前分支
git rebase master
- 将版本库未打包的松散对象打包
git repack
- 挑选某个分支的某几个提交到当前分支
git cherry-pick commitid
- git grep 查找git库里面的某段文字
#查找TODO
git grep TODO
- 修改提交
git rebase -i
将某个分支上的所有修改都应用成一个提交。默认修改都将进入暂存区
git merge --squash <分支名>
- 查找错误的节点
git bisect rum make test
- 查看操作日志
git reflog
- 撤销指定的提交记录,只会撤销当前的提交
git revert <commitid>
-
解决冲突
冲突是开发中最常见的了,看图片里的冲突 “<<<<<<<<< HEAD” 到 “=”是你的当前分支的修改,
从"" 到">>>>>>>mybranch" 是合并的分支的修改。这样就可以根据自己的需求合并了。 -
submodule:添加git仓库的子模块。场景:需要对依赖库进行修改和版本控制,且易于统一控制
git submodule add <url> <folder>