Java教程

Git 笔记

本文主要是介绍Git 笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、简介

Git 是一种分布式版本控制系统

2、官网

https://git-scm.com/

3、SVN和Git的区别

SVN

  • 优点

    • 采用集中式,保证安全性
    • 管理方便,逻辑明确
    • 代码的一致性高
    • 适合人数不多的项目开发
  • 缺点

    • 服务端单点故障
    • 必须连接SVN服务器上,否则不能对比,提交,还原。
    • 没有本地仓库
    • 不适合开源开发

Git

  • 优点
    • 有本地仓库,可以离线工作
    • 公共服务器压力和数据量都不会太大
    • 速度快,灵活
    • 分支操作非常流畅
  • 缺点
    • 学习成本高
    • 代码保密性查

4、.git的作用

用来跟踪管理版本库的

5、工作流程

  1. 代码优先初始化:git init
  2. 代码然后通过git add 提交到暂存区
  3. 再通过暂存区通过git commit 提交本地库
  4. 最后使用git push 推送远程仓库

6、查看SSH密钥

cd ~
rm -rvf .ssh
ssh-keygen -t rsa -C 邮箱地址
cat ~/.ssh/id_rsa.pub

7、开发者用户名和邮箱

# 设置
git config user.name 霖雨
git config user.email 1931063095@qq.com

# 删除
git config --unset user.name
git config --unset user.email

8、系统全局用户名和邮箱(推荐)

# 设置
git config --global user.name test
git config --global user.email test@qq.com

# 删除
git config --global --unset user.name
git config --global --unset user.email

9、配置别名

# 配置别名
git config --global alias.co checkout
git config --global alias.ss status
git config --global alias.cm commit
git config --global alias.br branch
git config --global alias.rg reflog
# 这里只是美化 log 的输出,实际使用时可以在 git lg 后面加命令参数,如:git lg -10 显示最近10条提交
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

10、其他

# 查看开发者用户名和邮箱
cat ~/.gitconfig
# 查看系统配置
git config --list
# 查看当前项目的 git 配置
cat .git/config
# 查看暂存区的文件
git ls-files
# 帮助命令
git --help -a
# 拉取、上传免密码
git config --global credential.helper store
# 删除工作区/暂存区的文件
git rm [file1] [file2] ...
# 停止追踪指定文件,但该文件会保留在工作区
git rm --cached [file]
# 改名工作区/暂存区的文件
git mv old.txt new.txt
# 建立当前分支和远程分支的追踪关系
git push -u origin master
# 删除远程分支
git push origin --delete master
# 将本地的所有分支都推送到远程主机
git push --all origin
# 创建一个空白分支,先把当前分支的内容全部删掉
git rm -rf .
# 再创建
git checkout --orphan 空的分支名

11、普通命令

# 初始化
git init
# 查看状态
git status
# 提交到暂存区
git add .
# 如果有错的情况下,移除暂存区
git rm --cached hello.txt
# 提交本地库
git commit -m "首次提交"

# 查看日志(HEAD:指针):提交记录可能会非常多,按 J 键往下翻,按 K 键往上翻,按 D 键往下页,按b往上翻页,按空格往下翻页,按 Q 键退出查看
# oneline -> 将日志记录一行一行的显示
# grep="关键字" -> 查找日志记录中(commit提交时的注释)与关键字有关的记录
# graph -> 记录图形化显示 !!!
# all -> 将所有记录都详细的显示出来
# author "username" -> 查找这个作者提交的记录
# reverse -> commit 提交记录顺序翻转
# before -> 查找规定的时间(如:1天/1周)之前的记录
# num -> git log -10 显示最近10次提交 !!!
# stat -> 显示每次更新的文件修改统计信息,会列出具体文件列表 !!!
# abbrev-commit -> 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符 !!!
# pretty=format:"xxx" ->  可以定制要显示的记录格式 !!!
# p -> 显示每次提交所引入的差异(按 补丁 的格式输出)!!!
git log --oneline
          --grep="关键字"
          --graph
          --all
          --author "username"
          --reverse
          -num
          -p
          --before=  1  day/1  week/1  "2019-06-06"
          --after= "2019-06-06"
          --stat
          --abbrev-commit
          --pretty=format:"xxx"

# 查看日志(HEAD:指针):显示版本历史信息回滚步数
git reflog
# 切换版本号
git reset --hard 版本号

# 永久删除的文件恢复
git add test.txt
git commit -m "new file"
rm test.txt
git add test.txt
git commit -m "恢复"
git reflog
git reset --hard 51acbc2

# 绑定远程仓库
git remote add origin https://github.com/q-linyu/test.git
# 查看远程仓库的别名
$ git remote -v
origin  https://github.com/q-linyu/test.git (fetch)
origin  https://github.com/q-linyu/test.git (push)

# 推送远程仓库 or 强行推送
git push -u origin master | git push origin master -f

# 克隆/把远程的代码拉到本地来
git clone https://github.com/q-linyu/test.git

12、日志无法显示中文问题

git -c core.pager=more log
# 如果可以显示中文的话,把 pager 设置为 more
git config --global core.pager more

13、项目标记里程碑

# 项目上线发布的时候用,做一个标记
git tag

14、分支的含义

在版本控制过程中,使用多条线同时推进多个任务

14-1、分支的好处

  • 同时并行推进多个功能开发,提高开发效率
  • 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可

14-2、分支

# 查看分支
git branch
# 查看所有分支的最后一次操作 
git branch -v
# 查看当前分支
git branch -vv

# 新建分支
git branch 分支名

# 切换分支
git checkout 分支名

# 删除本地分支
git branch -d 分支名

# 强行删除分支 
git branch -D 分支名

# 删除远处仓库分支 
git branch origin:分支名

# 合并分支
git checkout master
git merge 要合并的分支名 -m "描述"
# or
git merge 要合并的分支名 --no-ff

15、把远程库的数据推送到本地库

# 方式一
git fetch origin master
git checkout origin/master
git log -p master.. origin/master
git checkout master
git merge origin/master
# 方式二
git pull origin master

16、暂存区操作大全

# 将所有未提交的修改(提交到暂存区)保存至堆栈中
git stash
# 给本次存储加个备注,以防时间久了忘了
git stash save "存储"
# 存储未追踪的文件
git stash -u

# 查看存储记录
$ git stash list

在 Windows 上和 PowerShell 中,需要加双引号
# 恢复后,stash 记录并不删除
git stash apply "stash@{index}"
# 恢复的同时把 stash 记录也删了
git stash pop "stash@{index}"
# 删除 stash 记录
git stash drop "stash@{index}"
# 删除所有存储的进度
git stash clear
# 查看当前记录中修改了哪些文件
git stash show "stash@{index}"
# 查看当前记录中修改了哪些文件的内容
git stash show -p "stash@{index}"

17、文件对比

# 查看工作区和暂存区单个文件的对比
git diff filename
# 查看工作区和暂存区所有文件的对比
git diff
# 查看工作区和暂存区所有文件的对比,并显示出所有有差异的文件列表
git diff --stat

# 查看暂存区与上次提交到本地仓库的快照(即最新提交到本地仓库的快照)的对比
git diff --cached/--staged
# 查看工作区与上次提交到本地仓库的快照(即最新提交到本地仓库的快照)的对比
git diff branchname
# 查看工作区与 HEAD 指向(默认当前分支最新的提交)的对比
git diff HEAD

# 查看两个本地分支中某一个文件的对比
git diff branchname..branchname filename
# 查看两个本地分支所有的对比
git diff branchname..branchname
# 查看远程分支和本地分支的对比
git diff origin/branchname..branchname
# 查看远程分支和远程分支的对比
git diff origin/branchname..origin/branchname

# 查看两个 commit 的对比
git diff commit1..commit2

18、远程仓库操作

# 查看所有远程主机
git remote
# 查看关联的远程仓库的详细信息
git remote -v
# 删除远程仓库的 “关联”
git remote rm projectname
# 设置远程仓库的 “关联”
git remote set-url origin <newurl>

18、发布标签

# 默认在 HEAD 上创建一个标签
git tag v1.0
# 指定一个 commit id 创建一个标签
git tag v0.9 f52c633
# 创建带有说明的标签,用 -a 指定标签名,-m 指定说明文字
git tag -a v0.1 -m "version 0.1 released"

# 查看所有标签
# 注意:标签不是按时间顺序列出,而是按字母排序的。
git tag

# 查看单个标签具体信息
git show <tagname>

# 推送一个本地标签
git push origin <tagname>
# 推送全部未推送过的本地标签
git push origin --tags

# 删除本地标签
# 因为创建的标签都只存储在本地,不会自动推送到远程。
# 所以,打错的标签可以在本地安全删除。
git tag -d v0.1
# 删除一个远程标签(先删除本地 tag ,然后再删除远程 tag)
git push origin :refs/tags/<tagname>

19、.gitignore 配置详情

#java
*.class

#package file
*.war
*.ear
*.zip
*.tar.gz
*.rar
#maven ignore
target/
build/

#eclipse ignore
.settings/
.project
.classpatch

#Intellij idea
.idea/
/idea/
*.ipr
*.iml
*.iws

# temp file
*.log
*.cache
*.diff
*.patch
*.tmp

# system ignore
.DS_Store
Thumbs.db
这篇关于Git 笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!