Git:分布式版本控制软件


这意味着,本地也会有版本控制仓库(V1、V2、V3版本),本地修改后,一般先(把V4)提交到本地的版本控制仓库,再(把V4)推送到中心服务器仓库。


官网

Git官网

Git for Windows

git的相关工作区域

三大区域.png

  • 工作区

    • 已入版本库

    • 新修改

  • 暂存区

  • 版本库

FIRST COMMAND

git --version
git --help
git help xxx

全局初始化

配置文件相关

  • 项目配置文件

    • 文件位置:当前项目文件/.git/config

    • --local
      
  • 全局配置文件

    • 文件位置:~/.gitconfig
    • --global
      
  • 系统配置文件

    • 文件位置:/etc/.gitconfig

    • --system
      

个人信息配置

git config --global user.name "Hasee"
git config --global user.email "[email protected]"

验证配置:

git config --global --get-all user.name
git config --global --get-all user.email
git config --list

开始仓库

开始仓库有两种方法:

  1. 创建新的仓库

  2. 克隆仓库

下面介绍创建新的仓库,克隆仓库见Github克隆仓库

仓库初始化

进入仓库目录

git init

初始化后产生.git文件夹。

.git文件夹:存放着Git管理信息的目录,初始化仓库时会自动创建。 如果想移除仅仅移除git而保留项目文件,则只需要删除.git文件夹即可。

另外,可用自行创建.gitignore文件,里面放着git忽略的文件(git不管理的文件),一个文件一行,可以用通配符。

日常使用

参考git相关工作区域部分。

检测文件的状态

git status
  • 如果没有修改或者已经commit了,则不显示

  • 如果修改了还未add,则显示红色modified

  • 如果修改了,add了,但是没有commit,则显示绿色modified

git diff

只显示修改了还未add的具体修改情况。

查看版本信息

git log
git log --graph --pretty=format:"%h %s"
git reflog    # 可以查看被reset的版本,即之后的版本

不同文件状态之间的反复横跳

恢复回原始文件

git checkout -- xxx

修改了未add的,恢复成未修改的状态

添加到本地库暂存区

git add xxx
git add .

本地库暂存区退回工作区修改状态

get reset HEAD

提交到本地版本控制仓库(生成版本)

git commit -m "注释xxx"

从版本控制仓库退回到暂存区

git reset --soft 版本hash

从版本控制仓库退回到工作区修改状态

git reset --mix 版本hash

版本回滚【完整回滚至工作区】

git reset --hard 版本hash

分支相关

git的后一个版本只保存修改的位置,没修改的地方回通过一个指针指向前一个版本。

主分支一般默认是master。

查看分支

git branch

其中带*的绿色的是当前分支。

创建分支

git branch xxx

新创建的分支指向当前分支的当前版本。

删除分支

git branch -d xxx

切换分支

git checkout xxx

合并分支

git merge xxx

将xxx分支的内容合并到当前分支上。

合并的时候可能出现冲突,解决方法是手动修复,然后重新提交(add、commit)。

解决冲突的高阶操作见配合Beyond Compare解决冲突

变基

作用是将多个提交记录合并成一个。

申请合并

git rebase -i 版本Hash

从该版本到现在的提交记录合并

git rebase -i HEAD~3

最近三次提交合并

修改合并后的记录情况

pick 123231
pick 123232
pick 123233

修改为:

pick 123231
s 123232
s 123233

pick是保留的版本,其他的改为s。

commit提交。

版本标签相关

可以认为是版本的别名,在Github上可以显示。

git tag -a v1 -m "xxx"

在本次记录上打一个tag标签

推送到远程

git push origin --tags

Github配合

连接到Github上

本地创建密钥

ssh-keygen -t -rsa -C "[email protected]"

在~.ssh目录中(如C:\Users\zqg.ssh),生成了id_rsa和id_rsa.pub文件。其中前者是私钥,后者是公钥。

将密钥上传到Github上

在Github-头像-Settings-SSH and GPG keys-New SSH key,添加公钥的内容。

测试联通性

ssh -T [email protected]

与远程库关联

检查本地的库是否已经关联

git remote -v

添加关联

git remote add origin "http://github.com/zqg/test.git"

意思是添加了一个本地标识(别名):origin,这个别名指向后面的URL。

删除关联

git remote remove origin

推送

完整写法:

git push origin main master

origin是关联的本地标识,main是本地分支,master是远程分支。

远程分支可以缺省,则与本地同名。

git push -u origin main master

-u意思是设为默认,以后可以直接缺省推送:

git push

拉取

克隆(首次拉取)

git clone http://github.com/zqg/test.git ./

./可以缺省,则在当前目录下创建一个子文件夹,名字为远程库名。

此时,拉取的仓库只显示master分支,但是依然可以直接切换分支。(只是切换前不显示而已)

往本地仓库拉取合并

git pull origin xxx

这个命令等同于:

git fetch origin xxx
git merge origin origin/xxx

或者

git fetch origin xxx
git rebase origin/xxx

其中,fetch是把远程仓库拉到本地版本库,merge是把本地版本库放回本地工作区。

协同工作

在Github-头像-Settings-Collaborators,邀请用户即可添加协同工作者。

高阶操作

配合Beyond Compare解决冲突

git config --global merge.tool bc
git config --global mergetool.path 'D:\BeyondCompare\BCompare.exe'
git config --global mergetool.keepBackup false

使用方法:

git mergetool

results matching ""

    No results matching ""

    results matching ""

      No results matching ""