参考文章:https://www.liaoxuefeng.com/wiki/896043488029600
一、Windows上安装Git
从官网直接下载安装
https://git-scm.com/downloads
安装完成后打开Git Bash,类似于命令行的窗口。
然后配置身份
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
注:git config命令的–global参数表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
二、Git基本命令
创建文件夹myDemo,打开Git Bash,定位到myDemo目录下。
- 初始化一个Git仓库,使用
git init
命令。 - 添加文件到Git仓库,分两步:
使用命令git add <file>
,注意,可反复多次使用,添加多个文件;
使用命令git commit -m <message>
,完成。 - 要随时掌握工作区的状态,使用
git status
命令。
如果git status
告诉你有文件被修改过,用git diff <file>
可以查看修改内容。 - HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令
git reset --hard commit_id
。
返回上一个版本git reset --hard HEAD^
返回上上一个版本就是git reset --hard HEAD^^
返回上100个版本可以写成git reset --hard HEAD~100
。
穿梭前,用git log
可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog
查看命令历史,以便确定要回到未来的哪个版本。 git diff HEAD -- readme.txt
命令可以查看工作区和版本库里面最新版本的区别- 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令
git checkout -- <file>
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>
,就回到了场景1,第二步按场景1操作。 - 工作区间文件删除后,从版本库中删除该文件,就用命令
git rm <file>
删掉。
三、分支管理
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>或者git switch <name>
创建+切换分支:git checkout -b <name>
或者git switch -c <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
查看分支合并图git log --graph
合并某分支到当前分支,并会创建新的commit,-m参数为“merge with no-ff”:
$ git merge --no-ff -m "merge with no-ff" dev
四、远程仓库
远程仓库可用Github或者Gitee。
1、配置Github
以Github为例,为了方面与Github数据的传输,不用每次输入密码,进行如下设置
- 打开Git Bash,创建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
一路回车,在用户主目录里找到.ssh
目录,里面生成了id_rsa
和id_rsa.pub
两个文件,打开id_rsa.pub
复制内容。
打开Github–>Settings–>SSH and GPG keys–>New SSH key出现界面:
Title随便写,将复制的内容黏贴上去–>Add SSH key。ok
2、将本地仓库添加远程库
场景:在本地创建了一个Git仓库commit后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步。
(1)登陆GitHub,然后,在右上角找到“new repository”按钮,创建一个新的仓库, 在Repository name填入myDemo,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库。
(2) 首先,将本地的myDemo仓库关联到Github上,在本仓库下运行命令:
$ git remote add origin git@github.com:xxxxxx/myDemo.git
xxxxxx替换成你自己的GitHub账户名
下一步,把本地库的所有内容推送到远程库上:
哪个能推送成功就用哪个吧,我也不明白
$ git push -u origin master #把当前分支master推送到远程
或
$ git push origin master -f #本地没readme
或
$ git push origin master --force #强制推送
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。如:
$ git push origin master
注:当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告
3、从远程库克隆
- 在Github上创建或使用现有的一个远程库。
- 用命令
git clone
克隆一个本地库:
$ git clone git@github.com:xxxxxx/gitskills.git
强制推送
场景:回退到某个版本修改后,想舍弃以前修改的内容,将现在修改后的内容推送到远程。不能pull了,使用git push --force
强制推送。
.gitignore文件不生效
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
git push -u origin master