学习笔记_Git

  • 基本概念
    • Distributed version control system
    • Git Lifecycle
      • Working Directory
        • 工作都在Working Directory做
        • git init --把当前目录变为一个working directory,这个命令会自动创建一个hidden的.git目录。
        • 它可能也可能不被git tracking
      • Staging Area
        • 从工作目录选择哪些文件要被git跟踪
        • git add 命令用来向staging area添加文件
        • 有些临时文件不要添加到staging area中
      • Commit
        • commit文件到git repository中
    • Git本地有三个工作区域:工作目录(working directory),暂存区(stage/index), 资源库(Repository或git directory),如果再加上远程的git仓库(remote directory)就可以分为四个工作区域。四个区域的转换关系如下;
  • Git是怎么工作的
    • 修改项目并commit后,会为修改的部分生成一个新的commit id。更旧的代码会被git保存,并可通过它被赋予的commit id访问。
    • 所有的commit都绑定到一个branch上,最后的commit有一个叫HEAD的指针。
    • Git repository的缺省branch叫Master Branch。
    • Branch的工作流程
    • 文件的四种状态:
      • Untracked:未跟踪,此文件在文件夹中,但并没有加入到git库,不参与版本控制。通过git add状态变为Staged
      • Unmodified:文件已经入库,未修改,即版本库中的文件快照内容与文件夹中的完全一致。这种类型的文件有两种去处,如果他被修改,就变为Modified;如果使用git rm移出版本库,则变为Untracked。
      • Modified:文件已修改,但仅仅是修改,没进行其它的操作。这个文件也有两种去处,通过git add可以进入暂存staged状态;使用git checkout则丢弃修改,返回到Unmodified状态。这个git checkout即从库中取出文件,覆盖当前修改!
      • Staged: 暂存状态,执行git commit则将修改同步到库中。这时库中的文件与本地文件一致,又变为了Unmodified状态。执行git reset HEAD <filename>取消暂存,文件状态变为Modified。
  • Git常用命令
      • git init 在本地目录会创建一个隐藏的".git"目录,git信息都保存在该目录中。git clone同时也可以实现初始化的目的。
      • git status 查看working folder文件状态
      • git add 1.txt 添加git tracking(放入staging area)
      • git add . 添加当前目录所有内容到staging area
      • git commit -m "备注" 真正commit文件
      • git remote add origin "<URL to repository>" 向working folder添加远程git repository  远程仓库的名称推荐使用默认的名称 origin
      • git remote 列出所有的remote库
      • git push origin master
      • git clone <URL> 这个命令会创建一个目录,目录名是repository名字,下载所有的repository内容到这个目录。
      • git pull origin master 从远程仓库中获取最新版本
      • git pull <URL> 也行
      • git branch <name-of-new-branch> 创建一个新的Branch
      • git branch -D <branch-name> 删除一个branch
      • git branch 列出现有branch
      • 多个分支并行执行,代码不冲突,同时存在多个版本。
      • git merge命令用来合并冲突分支
      • git checkout <branch-name> Switch到新的Branch,随着切换的分支的文件状态改变,在Windows Explorer中的文件目录也会相应改变
      • git checkout <commit-id> 也可以切换到某个commit版本上
      • git pull origin <branch-name> 提交这个branch变更到remote repository
      • git log 查看所有commit的历史
      • git stash 当你想切换分支,但又不像commit当前的变更时,可以用这个命令。如果untracked变更也想保存时,加-u参数。如果不做stash就切换,没commit的文件会在另一个branch中也被看到。
      • git stash -u 保存分支变更(包含untracked文件)
      • git stash pop 取回刚才保存的文件
      • git revert <commit-id> 撤销一个commit版本,同时创建一个新的commit-id, commit-id可以通过“git log”查询
      • git diff <old-commit-id> <new-commit-id> 比较两个commit-id之间的变化
      • git diff HEAD . 比较目前的head版本和当前修改的结果
 
git配置
  • 查看git配置:git config -l
  • 查看git系统配置:git config --system --list, 该配置其实在Git安装目录下etc目录中的gitconfig中 --system表示系统级
  • 查看git全局配置:git config --global --list, 该配置其实在用户目录的.gitconfig中 --global表示登录用户的全局
  • 这些配置可以通过编辑配置文件修改,也可以通过命令设置反映到配置文件中。
  • user.name和user.email要配置,告诉git远程服务器你是谁
    • git config --global user.name <username>
    • git config --global user.email <email-box>
 
忽略文件
  • 有些时候,我们不想把某些文件纳入版本控制中,比如数据库文件、临时文件、设计文件等。
  • 在主目录下建立“.gitignore”文件,此文件有如下规则:
    • 忽略文件中的空行或以#开头的行
    • 可以使用linux通配符,*代表任意多个字符,?代表一个字符,方括号代表可选字符范围,大括号代表可选字符串等。
    • 如果名称的最前面有一个感叹号,表示例外规则,将不被忽略。
    • 如果名称的最前面是一个路径分隔符“/”,表示要忽略的文件在此目录下,而子目录中的文件不忽略
    • 如果名称的最后面是一个路径分隔符“/”,表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)
  • 样例文件:
 
target/
pom.xml.tag
pom.xml.releaseBackup
pom.xml.versionsBackup
pom.xml.next
release.properties
dependency-reduced-pom.xml
buildNumber.properties
.mvn/timing.properties
.mvn/wrapper/maven-wrapper.jar
 
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
 
*.class
*.log
*.lock
 
#package file #
*.jar
*.war
*.ear
target/
 
#idea
.idea/
*.iml
 
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
 
### VS Code ###
.vscode/
码云配置
  • 设置本机绑定SSH公钥,实现免密码登录
    • 将公钥信息public key打开拷贝到码云账户中,输入登录密码验证即可。
  • 在码云上新建仓库
    • 私有对外不可见
    • .gitignore可以选择java即可。在用上面的.gitignore文件更新一下。
    • 克隆到本地
 
通过IDEA使用Git
  • 可以把clone下来的目录拷贝到想要通过git进行管理的目录中,就可以对这个目录进行管理了。超级万能模式。
 
有道无术,术尚可求;有术无道,止于术。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
posted @ 2020-09-15 12:53  风雨中的Jeff兔  阅读(144)  评论(0)    收藏  举报