新建代码库
git init // 在当前目录新建一个Git代码库git init [project-name]新建一个目录,将其初始化为Git代码库git clone [url] // 下载一个项目和它的整个代码历史
配置
git --version //查看git的版本信息git config -e [--global] // 编辑Git配置文件
设置Git的user name和email:(如果是第一次的话)
git config --global user.name //获取当前登录的用户git config --global user.email //获取当前登录用户的邮箱
/ 如果刚没有获取到用户配置,则只能拉取代码,不能修改 要是使用git,你要告诉git是谁在使用/git config --global user.name 'userName' //设置git账户,userName为你的git账号,git config --global user.email 'email'
// 如果你公司的项目是放在自建的gitlab上面, 如果你不进行配置用户名和邮箱的话, 则会使用全局的, 这个时候是错误的, 正确的做法是针对公司的项目, 在项目根目录下进行单独配置git config user.name "gitlab's Name"git config user.email "gitlab@xx.com"git config --list 查看当前配置, 在当前项目下面查看的配置是全局配置+当前项目的配置, 使用的时候会优先使用当前项目的配置
附: 如果git pull 每次都要求输入用户名和密码,则可以执行如下配置git config --global credential.helper store
生成密钥
ssh-keygen -t rsa -C "youremail@qq.com"
如果不需要密码的话,连续3个回车。
最后得到了两个文件:id_rsa和id_rsa.pub
cat ~/.ssh/id_rsa.pub // 查看密钥
登陆Github, 复制本地密钥添加 ssh
把id_rsa.pub文件里的内容复制到这里
查看历史提交信息
git show 查看最近一次的提交git show [commit_id] 查看某次历史提交信息的完整信息git show HEAD查看HEAD标签当前指向的提交的完整信息git show master 查看master分支最新一次提交的完整信息git show master^或git show master~ 查看master分支最新一次提交的父提交的完整信息git show master^2查看master分支最新一次提交的第二个父提交(也就是父提交的父提交)的完整信息
查看完整的历史提交(commit)信息
git log 可以按键盘空格/字母b键将信息向下/向上翻页,也可以按键盘向上/向下箭头向上/向下按行滚动git log –p 输出每一个commit之间的差异信息git log --stat 输出每一个commit之间的差异统计信息git log--oneline 输出历史commit的简短信息
git 撤销文件的修改记录
分两种情况
第一种: 没有添加到暂存区
git checkout -- file 撤销单个文件的修改记录 例子:git checkout -- remead.mdgit checkout . 撤销本地所有文件的修改记录
第二种: 添加暂存区,没有提交
git reset HEAD filename 从暂存区里撤到本地,在进行第一种情况的操作git reset 从暂存区里把所有文件,撤回到本地
git 标签
git tag 查看所有的标签git tag -a 'v1.0.0' hash -m 'v1.0.0'git tag -l 'v1.8.5*' 查看以v1.8.5开头的标签git show v1.4 通过使用 git show 命令可以看到标签信息与对应的提交信息:git tag -d [tagname] 删除本地标签git push origin :refs/tags/test_tag //本地tag删除了,再执行该句,删除线上tag
默认情况下,git push并不会把tag标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。
1.push单个tag,命令格式为:git push origin [tagname]
例如:git push origin v1.0 #将本地v1.0的tag推送到远端服务器
2.push所有tag,命令格式为:git push [origin] --tags
例如:git push --tags
或git push origin --tags 推送多个tags, 把本地所有不在远程仓库的tag,全push到远程上
git diff 比较差异
git status告诉你有文件被修改过,用git diff可以查看修改内容git diff 文件对比git diff filepath 工作区与暂存区比较git diff HEAD filepath 工作区与HEAD ( 当前工作分支) 比较git diff --staged 或 --cached filepath 暂存区与HEAD比较git diff branchName filepath 当前分支的文件与branchName 分支的文件进行比较git diff commitId filepath 与某一次提交进行比较
git reset --hard HEAD^ 回到上一个版本git reset HEAD^ --soft 回到上一个版本,保留修改git reset --hard HEAD^^ 回到上上一个版本git reset --hard HASH #返回到某个节点,不保留修改。git reset --soft HASH#返回到某个节点。保留修改git reset 清空暂存区里的所有git reflog查看命令历史,以便确定要回到哪个版本
上传远程仓库的步骤
git add 文件名 单一跟踪git add . 当前目录下的所有文件跟踪git commit -m '文件说明' 提交git remote add origin url 添加远程仓库git push -u origin mastergit push -u origin branchName 创建远程的分支的同时,设置默认分支,这样以后就可以通过git push直接传到默认的当前分支,相当于 上传远程分支(git push origin branchName)和 本地分支关联远程分支相结合(git branch –-set-upstream-to=[远程分支名])git clone url
从现有 Git 仓库中拷贝项目:git clone <repo>
克隆到指定的目录,可以使用以下命令格式:git clone <repo> <directory>
git log 查看提交历史git log --pretty=oneline:将只会显示提交的commit id号和对应的注释git log -p filename: 可以显示该文件每次提交的diffgit log -- filename (git log filename) 可以看到该文件相关的commit记录git show commit-id filename 查看某次提交中的某个文件变化
git 基础命令
git fetch [远程仓库名]git status 命令用于查看项目的当前状态也可以查看在你上次提交之后是否有修改git status -s 简短输出,没加-s详细输出git branch filename 创建分支git branch 查看本地分支git branch -a 查看所有的分支(包括本地和远程分支)git branch -r 查看所有远程分支git branch -d filename 删除本地分支git branch -m dev develop 本地分支更改名字
git branch –-set-upstream-to=[远程分支名] 本地分支关联远程分支git checkout 分支 切换本地分支git checkout -b dev 创建本地分支并切换git stash // 冻结当前的分支修改git stash list // 列出所有的工作现场存储(查看所有的stash)stash_id/1通过git stash list 查看的第几个git stash apply stash@{stash_id} 是恢复指定的进度到工作区。git stash pop 恢复最新的进度到工作区。git默认会把工作区和暂存区的改动都恢复到工作区。git stash pop --index 恢复最新的进度到工作区和暂存区git stash drop [stash_id]
删除一个存储的进度。如果不指定stash_id,则默认删除最新的存储进度git stash clear 删除所有存储的进度git merge 分支 合并分支git merge --abort 回到合并之前的状态
注:如果合并之后,改过本地文件,想要撤销合并,需要git add ,在执行git merge --abort命令回到合并之前的状态
如果合并有冲突的话,解决分四步
1.通过git status 查看冲突的文件
2.手动找文件解决冲突
3.再通过 git commit -m 解决冲突
4.上传代码
当我想从远程仓库里拉取一条本地不存在的分支时git checkout -b 本地分支名 origin/远程分支名 将会自动创建一个新的本地分支,并与指定的远程分支关联起来。
想要创建一个远程的分支 分三步1.git checkout -b dev 创建本地分支并切换2.git push origin dev:dev 把新建的本地分支push到远程服务器,远程分支与本地分支同名
如:git push origin dev1:dev1。注意,:前后不要有空格
或者 git push --set-upstream origin 分支名 //推送本地分支到远程仓库3.git branch -a 查看所有分支 会看到remotes/origin/dev这个远程分支,说明新建远程分支成功。
删除远程分支 (两种)1.git push origin :dbg_lichen_star 推送一个空分支到远程分支,其实就相当于删除远程分支
如:git push origin :dev1。这是删除远程分支,本地分支并没有被删除2.git push origin --delete dbg_lichen_star
拉取远程分支并根据远程分支创建本地分支(两种)1.git checkout -b 本地分支名 origin/远程分支名2.git fetch origin 远程分支名:本地分支名 例子:git push origin hotfix/v5.9.6:hotfix/v5.9.6
拉取指定远程指定分支的代码git pull <远程库名> <远程分支名>:<本地分支名>
如:git pull origin dev1:dev1
上传代码到指定的远程分支git push <远程库名> <远程分支名>:<本地分支名>
如:git push origin dev1:dev1
上传远程分支 git push origin dev1git push -u origin branchName 创建远程的分支的同时,设置默认分支,这样以后就可以通过git push直接传到默认的当前分支,相当于 上传远程分支(git push origin branchName)和 本地分支关联远程分支相结合(git branch –-set-upstream-to=[远程分支名])
强制删除用本地更改远程分支的代码 git push --force origin
本地所有分支提交远程 git push --all origingit push origin --tags // git push不会推送标签(tag),除非使用–tags选项。
git找回本地误删的文件 (三步)
1.git status 查看工作区的变化2.git reset HEAD 文件路径(撤销恢复修改的)3.git checkout 文件路径
更改上次提交的commit
上传远程仓库的步骤实例
$ git add mdd-web/src/main/java/com/******/mdd/App.java
$ git commit -m '测试命令行提交'
$ git push origin dev1:dev1
本地合并代码步骤实例
Administrator@WIN-ORO5ENF9L0S MINGW64 /d/workspace_mdd_engine (develop)
$ git branch -a
结果如下
* develop
dev1
master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/dev1
remotes/origin/master
Administrator@WIN-ORO5ENF9L0S MINGW64 /d/workspace_mdd_engine (develop)
$ git merge origin/dev1
Updating c04bff3..fe503f7
Fast-forward
mdd-web/src/main/java/com/******/mdd/App.java | 1 +
1 file changed, 1 insertion(+)
这里,可以选择将远程的分支,合并到当前分支。也可以将本地的分支,合并到当前分支。区别在于名字,origin/dev1是远程分支,dev1是本地分支。