基本命令
git init 初始化一个本地仓库
git status 显示暂存区与仓库区的差异
git log 查看提交记录
git show commit 查看某次提交的详细(commit为commit 后的那一串)
git show 查看最新一次提交
git add --all file path 添加文件到本地库(file path为文件路径)
git commit -m“describe” 提交到本地库(describe为提交说明)
git commit -a -m"describe" 添加所有到本地并提到本地
git pull 拉取远程库最新文件
git push 推送到远程仓库
git merge branchName 合并(把branchName 分支合并到当前分支)
git branch 查看所有分支
git checkout filepath 假如filepath文件被删除则会回复,如果被修改则恢复之前的状态(预测是这样)
git checkout branchName (切换到branchName分支)
git checkout -b branchName(新建一个branchName分支,如果branchName分支已经存在会提示“ A branch named 'test2' already exists.”效果等同于 git branch branchName;git checkout branchName)
git branch -d branchName 删除branchName 分支(不能删除当前分支,需要在其他分支删除branchName分支)
git commit --amend 修改已经提交的日志
git show commit fileName 查看某次commit中具体某个文件的修改,没有修改就只有文件名
git rm -r --cached . GIT 在提交之前撤销add操作使用
git diff branchName1 branchName2 --stat 显示两个分支所有有差异的文件列表
git diff branchName1 branchName2 显示所有有差异的文件的详细差异
git diff branchName1 branchName2 filepath 显示指定文件filepath详细差异
git status 先看一下add 中的文件
git reset HEAD 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了
git reset HEAD XXX/XXX/XXX.java 就是对某个文件进行撤销了
如果不小心 弄错了 git add后 , 又 git commit 了。(还没push)
先使用
git log 查看节点
然后
git reset commitId
git reset commit_id (回退到上一个 提交的节点 代码还是原来你修改的)
git reset –hard commit_id (回退到上一个commit节点, 代码也发生了改变,变成上一次的)
还原已经提交的修改
此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交
git revert HEAD 撤销前一次 commit
git revert HEAD^ 撤销前前一次 commit
git revert commit-id (撤销指定的版本,撤销也会作为一次提交进行保存)
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。
git 代码暂存指令:git stash
git 代码暂存列表信息:git stash list
git 代码应用暂存代码:git stash apply stash@{1}
git stash clear 清除暂存
git diff hash1 hash2 --stat 对比两次提交的不同
clear 清屏
source tree Git界面化工具
git log 中文显示乱码
git config --global core.quotepath false;
git config --global gui.encoding utf-8;
git config --global i18n.commit.encoding utf-8;
git config --global i18n.logoutputencoding utf-8;
export LESSCHARSET=utf-8;
git 解决 fatal: Out of memory, malloc failed (tried to allocate 524288000 bytes ) 问题
git config http.postBuffer 0
git config --global http.postBuffer 0
每次都要输密码问题
git config credential.helper store
这里没有--global意思是指只对这个仓库生效,建议以后都不要加--global让代码配置以仓库为单位存储就好,设置成全局不灵活打开.git文件夹的.config文件,会发现多了两行
[credential]
helper=storegit
push 到远程仓库,输入用户名和密码,注意要输入正确的
再次运行git push 就不用输入用户名和密码了在用户主目录文件夹多了一个文件git-credentials,这个就是用来存储用户名和密码的
也可以在第2步时指定此文件文件名和存储位置
--file ~/git-credentials
~代表当前目录
也可以使用创建windows系统环境变量的方式,道理都是一样,让系统知道去哪里找这个用户名和密码就好
身份验证失败,重新验证 控制面板\用户帐户\凭据管理器配置凭证
git config --system --unset credential.helper
之后再进行git操作时,弹出用户名密码窗口,输入即可
打印所有标签 git tag
打印符合检索条件的标签 git tag -l 1.*.*
查看对应标签状态 git checkout 1.0.0
创建轻量标签 git tag 1.0.0-light
创建带备注标签(推荐) git tag -a 1.0.0 -m "这是备注信息"
针对特定commit版本SHA创建标签 git tag -a 1.0.0 0c3b62d -m "这是备注信息"
删除标签(本地) git tag -d 1.0.0
将本地标签发布到远程仓库 发送所有 git push origin --tags
指定版本发送 git push origin 1.0.0
删除远程仓库对应标签 // Git版本 > V1.7.0 git push origin --delete 1.0.0 // 旧版本Git git push origin :refs/tags/1.0.0
如指定关键字为“init”的所有提交
git log --grep=init
筛选查看日志
git log --since="July 7" 查7月7号之后的log
git log --before="July 7"查7月7号之前的log
git log --author="作者" 只看这个人提交的
git log --pretty=oneline 单行显示提交id和日志
git log --pretty=format:"%h - %an, %ar : %s"格式化显示提交日志
选项
说明
%H 提交的完整哈希值
%h 提交的简写哈希值
%T 树的完整哈希值
%t 树的简写哈希值
%P 父提交的完整哈希值
%p 父提交的简写哈希值
%an 作者名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用--date =选项来定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期(距今多长期)
%s 提交说明
git log dev ^master 查看 dev 有,而 master 中没有的
git log master..dev 查看 dev 中比 master 中多提交了哪些内容
git log dev...master 不知道谁提交的多谁提交的少,单纯想知道有什么不一样
git log --left-right dev...master在上述情况下,再显示出每个提交是在哪个分支上注意 commit 后面的箭头,根据我们在 –left-right dev…master 的顺序,左箭头 < 表示是 dev 的,右箭头 > 表示是 master的。
在 git commit 的时候会出现 MERGE_HEAD 冲突:
error: You have not concluded your merge (MERGE_HEAD exists).
hint: Please, commit your changes before merging.
fatal: Exiting because of unfinished merge.
基本上,使用保留本地修改的方式就可以解决这个冲突:
git merge --abort
git reset --merge
git pull
网友评论