奇迹969

 

git 使用

 git4个的区域

git 是版本控制工具

复制代码
工作区
  当前工作的地方个(git status 看到的文件是红色的)
缓存区
  git add之后的是缓存区,(git status 看到的文件是绿色的) 
本地仓库
  commit 之后的区域
远程仓库
  远程的仓库 比如码云,github
复制代码

git的初始化:

git init .    //  可以是点 或者文件名(点是当前文件夹的意思) 将当前目录变成git发的仓库 初始化 会产生.git的隐藏的文件
git add . 文件夹或者文件 . 是当前文件

当执行git add . 是出现以下警告是因为windows中的换行符为 CRLF, 而在linux下的换行符为LF,所以在执行add . 时出现提示

warning: LF will be replaced by CRLF in .idea/workspace.xml. The file will have its original line endings in your working directory
git commit -m '提交信息' 写的多的,尽量写的多点
git remote origin https://url.git 将本地仓库和远程仓库做关联,第一次上传的时候需要写
git push origin master 将本地的东西,推到码云上(远程的仓库)

 

git的配置信息的查看和修改

复制代码
git config -l 查看所有的配置信息
git config --global -l 查看邮箱用户名
git config --global --unset user.email 取消邮箱
git config -- global user.emali "邮箱" 设置邮箱
git config --global --unset user.name 取消用户名
git config --global user.name ''用户名"
复制代码

 


git的提交记录

复制代码
git log 查看提交记录(之前的提交记录)
git reset --hard 哈希值(在git log中可以看到回退的地方)本地仓区到工作区
git reflog 看之前的回退后的之前的版本(查看所有的提交记录)
git reset --hard 哈希值(在git reflog中可以看到哈希值,黄色的)
git status 看看当前的状态,
git diff 对比当前文件中的所有的文件 本地仓库和工作区的文件的的区别,只有在add 和commit的文件才能看出区别
git diff 文件名 (仅对比这个文件) 本地仓库和工作区的文件的的区别
git diff --cached 文件名(或者都不加,对比当前文件中的所有的文件) 本地仓库和缓存区的区别
git checkout 文件名 将工作区的内容回退到最近一次提交的地方
git reset HEAD 文件名 将缓存区的文件回退到工作区(不会覆盖工作区的内容)
复制代码

 补充:

-p 用来显示每次提交的内容差异

你也可以加上 -2 来仅显示最近两次提交

复制代码
[Derek@git]git log -p -2
commit 86d801bbaa4cc560acc7c8f79a65cac85201f170 (HEAD -> master)
Author: wangfeng7399 <wangfeng17399@163.com>
Date:   Tue Feb 19 18:48:48 2019 +0800

    update

diff --git a/README.md b/README.md
index e69de29..a34691f 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+this is new line

commit 88a09aa009af29e9a784d6dbb68589f70f1c51be
Author: wangfeng7399 <wangfeng17399@163.com>
Date:   Tue Feb 19 18:48:04 2019 +0800

    create

diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e69de29
复制代码

另外一个常用的选项是 --pretty。 这个选项可以指定使用不同于默认格式的方式展示提交历史。 这个选项有一些内建的子选项供你使用。 比如用 oneline 将每个提交放在一行显示,查看的提交数很大时非常有用。 另外还有 shortfull 和 fuller 可以用,展示的信息或多或少有些不同,请自己动手实践一下看看效果如何。

[Derek@git]$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit

但最有意思的是 format,可以定制要显示的记录格式。 这样的输出对后期提取分析格外有用 — 因为你知道输出的格式不会随着 Git 的更新而发生改变:

git log --pretty=format 常用的选项 列出了常用的格式占位符写法及其代表的意义。

选项说明
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 --date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明

git log 的常用选项

选项说明
-p 按补丁格式显示每个更新之间的差异。
--stat 显示每次更新的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status 显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--graph 显示 ASCII 图形表示的分支合并历史。
--pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。

 限制 git log 输出的选项 中列出了常用的选项

选项说明
-(n) 仅显示最近的 n 条提交
--since, --after 仅显示指定时间之后的提交。
--until, --before 仅显示指定时间之前的提交。
--author 仅显示指定作者相关的提交。
--committer 仅显示指定提交者相关的提交。
--grep 仅显示含指定关键字的提交
-S 仅显示添加或移除了某个关键字的提交

 

git的快照

复制代码
快照:适用一个人开发的时候,快照不需要拍摄太多
git stash 快照 (在工作区中有修改才能做快照),做完快照,文件恢复到你最近提交的状态
git stash pop 恢复快照 = git stash apply + git stash drop
git stash list 查看快照


$ git stash list
stash@{0}: WIP on master: 768d893 33333

git stash apply 快照的版本号 恢复快照
git stash apply stash@{0}
git stash drop 快照的版本号 删除快照 
冲突: 快照的内容和做完快照后修改的文件内容的内容有冲突,会将快照的内容个修改的内容同
同一行修改,只能通过人工来决定保留什么

删除快照
git stash drop stash@{0}
复制代码

 


快照使用的场景: 想把文件恢复最近一次提交的状态,保留从提交后的写的内容.

git的分支


切换分支前所有的代码都提交
分支:

复制代码
git branch 查看分支
git brabch 分支名 新建分支
git checkout 分支名 切换分支

$ git checkout dev
error: you need to resolve your current index first
test: needs merge


git checkout -b 分支名 (新建分支+切换分支) 

合并分支
git merge name(分支名) 合并分支,在合并到分支上做合并,先切换到要合并的分支,合并分支的时候有可能代码有冲突,同事讨论怎么留代码

git brabch -d 分支名 删除分支
复制代码

 


工作中,有多个分支
. master分支(线上的代码)
. dev 分支 (正在开发的代码,没上线的,测试用)
. review分支 (代码审核)
审核:
. 谁审核: 组长
. 审核什么: 逻辑 质量 PEP8规范
. 一个人一个分支
一般情况:
. 一般一个小功能,开发完成之后做一个合并
. 合并代码,大家都在

git 和github一样吗
git 做版本控制 linux的创始人 
github 就是一个网站 全球最大的同性交友网站
码云
gitlab 私有化部署
git 无中心化
svn 中心化
区块链 
因为没有权限

remote: Permission to 417685417/zdh.git denied to xiadongzhi1988.
fatal: unable to access 'https://github.com/417685417/zdh.git/': The requested URL returned error: 403控制面板-凭据管理-windows凭据 把这个里面的都删掉

 


git push origin name 把本地分支上传到远程
git clone https://url.git 下载远程仓库的文件 克隆下来的代码只有master分支



git checkout -b dev origin/dev = git branch dev origin/dev + git checkout dev 
git checkout -b dev origin/dev 这个命令可以切换分支,并以远程仓库的dev分支做母版创建一个dev分支’

以远程仓库的dev分支做母版创建一个dev分支’
git pull origin name 将远程仓库的文件拉取到本地

 

tag标签

  标签的意义

 

  • bug修复以后

  • 新增重要的功能 里程碑

 

 

复制代码
git tag 查看标签

git show 查看标签的详细信息

git tag -a v1.0 -m "信息" 对当前位置打标签

git tag -a v1.0 -m "信息" hash值 对之前的位置打标签

git tag -d name 删除标签

git push origin --tags 将本地的tag推送到远程仓库

git push origin :refs/tags/name 删除远程的tags
复制代码

 

 

 

 

忽略文件

  上传文件的时候可以将一些你不想上传的文件忽略掉:

如果是是github上新建的项目,可以做如下操作:

 

 会在你的项目中出现一个.gitignore 的文件,里面写的是你想忽略的内容

 

忽略文件的原则是:

 

  1. 忽略操作系统自动生成的文件,比如缩略图等;
  2. 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
  3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件

 

 

举个例子:

假设你在Windows下进行Python开发,Windows会自动在有图片的目录下生成隐藏的缩略图文件,如果有自定义目录,目录下就会有Desktop.ini文件,因此你需要忽略Windows自动生成的垃圾文件:

# Windows:
Thumbs.db
ehthumbs.db

然后,继续忽略Python编译产生的.pyc.pyodist等文件或目录

 

复制代码
# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
复制代码

 

 加上你自己定义的文件,最终得到一个完整的.gitignore文件,内容如下:

 

复制代码
# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini

# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

# My configurations:
db.ini
deploy_key_rsa
复制代码

 

 

最后一步就是把.gitignore也提交到Git,就完成了!当然检验.gitignore的标准是git status命令是不是说working directory clean

使用Windows的童鞋注意了,如果你在资源管理器里新建一个.gitignore文件,它会非常弱智地提示你必须输入文件名,但是在文本编辑器里“保存”或者“另存为”就可以把文件保存为.gitignore了。

有些时候,你想添加一个文件到Git,但发现添加不了,原因是这个文件被.gitignore忽略了

$ git add App.class
The following paths are ignored by one of your .gitignore files:
App.class
Use -f if you really want to add them.

 

 如果你确实想添加该文件,可以用-f强制添加到Git:

$ git add -f App.class

 

 .gitignore忽略规则的优先级

在 .gitingore 文件中,每一行指定一个忽略规则,Git检查忽略规则的时候有多个来源,它的优先级如下(由高到低):
1)从命令行中读取可用的忽略规则
2)当前目录定义的规则
3)父级目录定义的规则,依次递推
4)$GIT_DIR/info/exclude 文件中定义的规则
5)core.excludesfile中定义的全局规则

.gitignore忽略规则的匹配语法

在 .gitignore 文件中,每一行的忽略规则的语法如下:
1)空格不匹配任意文件,可作为分隔符,可用反斜杠转义
2)以“#”开头的行都会被 Git 忽略。即#开头的文件标识注释,可以使用反斜杠进行转义。
3)可以使用标准的glob模式匹配。所谓的glob模式是指shell所使用的简化了的正则表达式。
4)以斜杠"/"开头表示目录;"/"结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件;"/"开始的模式匹配项目跟目录;如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录。
5)以星号"*"通配多个字符,即匹配多个任意字符;使用两个星号"" 表示匹配任意中间目录,比如`a//z`可以匹配 a/z, a/b/z 或 a/b/c/z等。
6)以问号"?"通配单个字符,即匹配一个任意字符;
7)以方括号"[]"包含单个字符的匹配列表,即匹配任何一个列在方括号中的字符。比如[abc]表示要么匹配一个a,要么匹配一个b,要么匹配一个c;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配。比如[0-9]表示匹配所有0到9的数字,[a-z]表示匹配任意的小写字母)。
8)以叹号"!"表示不忽略(跟踪)匹配到的文件或目录,即要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。需要特别注意的是:如果文件的父目录已经被前面的规则排除掉了,那么对这个文件用"!"规则是不起作用的。也就是说"!"开头的模式表示否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用"!"也不会再次被包含。可以使用反斜杠进行转义。

需要谨记:git对于.ignore配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;

 

 

 

龙哥博客:https://www.cnblogs.com/meilong/p/git-chang-yong-ming-ling.html

posted on 2019-07-18 09:16  奇迹969  阅读(167)  评论(0编辑  收藏  举报

导航