Git介绍

查看手册

如:git help log或者git log --help

创建仓库的两种方式

  1. 本地初始化

    cd到目标文件夹下,执行git init

    跟远程建立连接git remote add <name> <url>name一般是取origin。

  2. 克隆远程仓库到本地

    git clone <url>

git clone默认会把远程仓库整个给clone下来,
但只会在本地默认创建一个master分支,
如果远程还有其他的分支,此时用git branch -a查看所有分支。
可以用git checkout -t origin/<branch_name>来拉取某个分支。

查看仓库状态

git status

Untracked files指未受控的文件。

Changes to be committed指受控文件发生了改变,还没commit。

添加文件到暂存区

git add

git add FileNameadd文件。

git add FolderName/add文件夹。

提交

git commit -m "add readme.txt"

提交修改分为两步,先把修改的文件add到暂存区,然后commit到仓库。如果有远程仓库的话,还要push到远程仓库。

查看提交记录

git log要输入一个q才能退出log的状态。

git log --pretty=oneline单行显示,简写git log --oneline

git log -p a.txt查看a.txt的log。

git log --author=Tom查看提交人Tom的提交记录。

撤销修改

git checkout readme.txt

checkout是指还没有commit的修改想要撤销掉。而如果commit了的修改想要撤销就要用reset了。

checkout某个文件是让那个文件回到仓库里HEAD的状态。

如果是用惯了svn的同学可能会想着先把那个文件删掉,再从仓库里拉取最新代码就行。在git里是不适用的哦。

回退版本

git reset --hard HEAD^回退到上个版本。

git reset --hard HEAD~n回退到前n次提交之前。

git reset --hard commit_id退到/进到 指定commit的sha码。

推送本地修改到远程仓库

git push,某些情况下你需要指定远程仓库的名字和分支,如git push origin master

拉取远程的最新代码

git pull

拉取特定分支的代码

git branch -a 可列出所有分支,包括远程的。现假设远程有一个叫 dev 的分支。

  1. 直接克隆某个分支

    git clone -b dev 仓库地址

  2. 先克隆了主分支,在拉取其他分支

    git checkout -b dev1 origin/dev

    注:dev1 的这个名字你可以随便改。

配置账户

git config --system --list

git config --global --list

git config --local --list

git config --local user.name "xxx"

git config --local user.email "xxx"

git clean

删除未受控的文件:git clean -f

删除未受控的文件和目录:git clean -fd

查看将要删除哪些文件:git clean -nf

查看将要删除哪些文件和目录:git clean -nfd

公钥管理

ssh-keygen -t rsa -C "yourEmail@xxx.com"

然后会让你选择存放路径和输入密码,可以直接按回车。

然后就会生成两个文件,一个id_rsa,一个id_rsa.pub。

拷贝id_rsa.pub里面的内容,粘贴到github或者gitee里。

添加成功后,输入ssh -T git@gitee.com来测试是否可以正常连接。

rebase配合merge使用

多人协作的话需要分支,分支上开发一个功能完成后需要合并到主干上,但是主干上不想要多余的提交记录。此时,可以使用变基。过程大概是这个样子。
git branch dev
git switch dev
//modify sth
git commit -m ‘dev 1’
//modify sth
git commit -m ‘dev 2’
git rebase -i startpoint endpoint//不写endpoint的话就是HEAD
//select pick reword fixup and so on
git switch master
git merge dev