什么是Git仓库
可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
把想让git管理的文件放入此仓库下,放到其他地方Git再厉害也找不到你想管理的文件。
git init git add . git commit -m ‘初始化‘ git remote add origin http://gitlab.sanleny.com/web/invoicing.git git push -u origin master
从一个服务器克隆一个现有的 Git 仓库 git clone https://github.com/test/test 在当前目录下创建一个名为“test”的目录,并在这个目录下初始化一个 .git 文件夹,从远程仓库拉取下所有数据放入 .git 文件夹,然后从中读取最新版本的文件的拷贝。 如果进入到这个新建的“test”文件夹,发现所有的项目文件已经在里面了,并且都被git管理起来了,直接使用即可,无需执行add和commit命令。 也可以自定义本地仓库的名字,使用如下命令: git clone https://github.com/test/test myTest 结果和上一个命令结果相同的,只是本地创建的仓库名字变为myTest。 Git 支持多种数据传输协议。上面使用的是 https:// 协议,也可以使用 git:// 协议或者使用 SSH 传输协议,比如 user@server:path/to/repo.git ,主要看git服务器的配置。
文件 .gitignore 的格式规范如下: 1 所有空行或者以 # 开头的行都会被 Git 忽略。 2 可以使用标准的 glob 模式匹配。 3 匹配模式可以以(/)开头防止递归。 4 匹配模式可以以(/)结尾指定目录。 5 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。 所谓的 glob 模式是指 shell 所使用的简化了的正则表达式 1 星号(*)匹配零个或多个任意字符 2 [abc]匹配任何一个列在方括号中的字符 (这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c) 3 问号(?)只匹配一个任意字符; 4 如果在方括号中使用短划线分隔两个字符,表示所有在这两 个字符范围内的都可以匹配 (比如 [0-9] 表示匹配所有 0 到 9 的数字) 5 使用两个星号(*) 表示匹配任意中间目录 (比如a/**/z 可以匹配 a/z, a/b/z 或 a/b/c/z等)
$ git update-index --assume-unchanged /path/to/file
$ git update-index --no-assume-unchanged /path/to/file
git status
git add xxx
git commit –-amend –m “xxxxxxxx”
有时候提交完了发现漏掉了几个文件没有添加,或者提交信息写错了。此时,可以运行带有 –amend 选项的提交命令尝试重新提交。
这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令),那么快照会保持不变,而你所修改的只是提交信息
git commit –a –m “xxxxxxxxxxxxxxx”
每次提交文件都需要git addàgit commit,有没有更简单的方式呢?
给 git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤
git diff –-cached(staged ) && git diff –-cached(staged ) xxx ##查看已暂存和版本库的修改
git config --list ##检查配置信息 查看全局配置 git config --global user.name git config --global user.email 修改全局配置 git config --global user.name ‘username‘ git config --global user.email ‘username@email.com‘ 移除文件 git rm xxx ##删除文件,需要commit git rm --cached xxx ##把文件从git仓库中删除,文件仍然保存在磁盘中 git rm -r --cached .mvn/ ##文件夹 重命名文件 git mv xxx1 xxx2 查看提交历史 git log git log --pretty=oneline ##显示每次提交的简略信息 git log –p ##显示每次提交的内容差异,可以加上 -1 来仅显示最近一次提交,除了显示基本信息之外,还附带了每次 commit 的变化 git log --stat 显示每次提交的简略的统计信息 git log --since=2.weeks 列出所有最近两周内的提交,可以设置多种格式,比如说具体的某一天 “2008-01-15”,或者是相对地多久以前 “2 years 1 day 3 minutes ago”。 暂存区和版本回退 git reset HEAD^ ##暂存区版本回退 git reset --hard HEAD^ ##暂存区、工作区间 版本回退 git reset HEAD~100 ##回退到前100个版本 git reset 命令使用文件作为参数,或者用^ 上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版本HEAD~100 reset HEAD xxxx git reset --hard HEAD^ 删除工作空间改动代码,撤销commit,撤销git add . --hard会让工作区的文件一起回退 git reset --soft HEAD^ 不删除工作空间改动代码,撤销commit,不撤销git add . git reset --mixed HEAD^ 不删除工作空间改动代码,撤销commit,并且撤销git add . 撤销工作区修改 git checkout – xxxx ##参数为文件 git别名 git config –-global alias.xxx1 xxx2 Xxx1为别名,xxx2为git命令 版本找回 git reflog #操作日志 git reset --hard logId ##logId 可以是前几位数 参数为commit id 1094a,版本号没必要写全,前几位就可以了,Git会自动去找 版本回退之后用git log是再也找不到提交历史了,也就无法找到commit id, 这个时候可以用git reflog来查看你的每一次命令 查看远程仓库 git remote -v 更换git远程仓库 git remote set-url origin http://gitlab.sanleny.com/web/sanleny-test1.git 分支更名 $ git branch –m xxx1 xxx2 xxx1为原来分支名称,xxx2为新分支名称 $ git brance –a 查看全部分支,包括远程和本地 $ git brance –r 查看远程分支 $ git brance –l 查看本地分支 $ git push origin --delete xxxxx 删除远程分支 一个本地仓库多个远程仓库 git remote set-url --add origin https://github.com/SanLeny/spark-study.git git push
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。
默认标签是打在最新提交的commit上 git tag configserver-RELEASE-0.0.1 || git tag configserver-RELEASE-0.0.1 xxx 创建带有说明的标签,用-a指定标签名,-m指定说明文字 git tag -a config-server-RELEASE-0.0.1 -m ‘配置中心第一个稳定版本‘ git tag -a config-server-RELEASE-0.0.1 -m ‘配置中心第一个稳定版本‘ xxxx git tag git show xxx git tag -d xxxx ##本地标签删除 git push origin xxxx ##推送本地标签到gitHub git push origin --tags ##推送全部尚未推送到远程的本地标签 git push origin :refs/tags/xxxxxx ##从远程删除
创建分支 git checkout -b dev git branch ##查看当前分支,当前分支前面会标一个*号 git merge dev ##合并指定分支到当前分支 git branch -d dev ##删除dev分支 git push origin dev:dev ##推送分支到远程仓库 非Fast forward合并 git merge --no-ff -m “xxxxxx" devTwo 因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去 我们之前说的合并分支时,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。 现在我们不用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。 git log --graph --pretty=oneline --abbrev-commit ##查看分支历史合并情况 不用Fast forward模式,分支历史上就可以看出分支提交信息和分支的信息 Git也会自动使用非Fast forward模式,如分支分叉的情况,git会自动使用非fast模式 这和之前合并 devTwo分支的时候看起来有一点不一样,开发历史从一个更早的地方开始分叉开来。 所以Git 帮我们做了一些额外的工作,出现这种情况的时候,Git 会使用两个分支的末端所指的快照以及这 两个分支的工作祖先(分叉点),做一个简单的三方合并。 rebase Git中除了合并,还有一种方式可以进行分支合并,就是rebase,你可以使用 rebase 命令将某一分支上(devRebase)的所有修改都移至另一分支上(master) git checkout devRebase git rebase master git checkout master git merge devRebase 1 首先找到这两个分支(当前分支 devRebase 、变基操作的目标分支master)的最近共同祖先 a6081ce 2 对比当前分支相对于该祖先的全部提交,提取出来存为临时文件,相当于删除这些提交,在历史中也查不到信息了 3 然后将当前分支devRebase指向目标xx1, 最后将之前另存为临时文件的修改依序应用,生成新的提交xx2 在rebase的过程中,也许会出现冲突。Git会停止rebase并会让你去解决冲突; 在解决完冲突后,需要执行git add命令标记为以解决, 不需要执行 git commit git rebase --continue ##这样git会继续应用(apply)余下的补丁 git rebase --abort ##可以用--abort参数来终止rebase的操作,并且分支会回到rebase开始前的状态。 git stash ##暂存分支 git stash list ##查看我们的暂存分支 恢复暂存分支 a:一是用git stash apply xxx恢复,stash内容并不删除,还需要git stash drop来删除; b:另一种方式是用git stash pop,恢复的同时把stash内容也删了:
原文:https://www.cnblogs.com/laity353/p/14680883.html