一:Git 是什么?

1
Git是目前世界上最先进的分布式版本控制系统。

二:SVN 与 Git 的最主要的区别?

SVN 为集中式版本控制系统,版本库是集中存放在中央服务器的
单独搭建 SVN 服务器,不能离线工作
操作简单,代码保密性较强

GIT 为分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库
适合分布式开发,强调个体
公共服务器压力和数据量都不会太大
速度快灵活
可以离线工作
操作复杂,代码保密性差

GitHub,免费的远程仓库,如果是个人的开源项目,放到 GitHub 上是完全没有问题的。GitHub 还是一个开源协作社区,通过 GitHub,既可以让别人参与你的开源项目,也可以参与别人的开源项目。

SVN 的存储需要依赖一个服务器,而 git 所有的东西是放在线上的。节约成本,省时省力。

‘Please tell me who you are.’

查看全局配置   git config –global –list

命令   git config –global user.name “你的 git 名称”
命令   git config –global user.email “你的 git 验证邮箱”

git 命令行中的操作命令:
命令  cd D:   进入 相应的磁盘
命令  mkdir   创建目录
命令  cd 进入当前盘符中的文件夹
命令  pwd 显示当前工作目录的全路径
命令  rm   删除文件
命令  ls 查看文件夹下的子文件

然后!最重要的步骤来了!!git init

命令  git init
显示成功后去相应的文件夹中查看是不是多了一个.git 文件

1
这个文件夹就是你的版本库了,把项目放在文件夹下。

三.将文件提交到 git 服务器。

你的本地仓库由 git 维护的三棵“树”组成:
  第一个是你的 工作目录,它持有实际文件;
  第二个是 暂存区(Index),临时保存你的改动;
  最后是 HEAD,指向你最近一次提交后的结果。

1.打开 Git Bash

命令 git add ‘文件名’
git add -u   提交所有被修改(modified)和被删除(deleted)文件,不包括新文件(new)
git add .   提交所有新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
git add -A   提交所有变化

把咱们的文件存放在一个神秘的地方 >>>> 暂存区 (暂存区在本机)

2.把文件提交到本地仓库中去。

git commit -m ‘我提交时候的备注(注释)’

3.查看 commit 状态

git status   用于显示工作目录和暂存区的状态。

4.查看修改内容。

git diff 你的文件名   会出现更改信息;
将更改后的东西提交上去,和之前一样。先 add 然后再 commit 。

5.版本退回

git log          ( 查看日志)
git reflog

git reset –hard HEAD^   退回到上个版本 如果需要退回好多版本就在后面加上 ^ 例: git reset –hard HEAD^^退回两个版本。
git reset –hard 191e0c7   回退到指定版本

6.删除

新建一个 b.txt,然后 commit 到库中。 并删除。

命令 1. git add

命令 2. git commit -m ‘备注’

命令 3. rm b.txt   这个是删除 b 文件的命令

回过头来看文件夹中的 b.txt

b.txt 不见了,查看下状态。
可以 commit,可以放弃修改  git reset –hard 版本号来回复文件。

7.连接远程仓库

  1. git init   -> 创建版本库
  2. git add 文件名   -> 添加到暂存区
  3. git commit -m ‘提交注释’   ->提交到本地仓库

然后连接本地仓库,并将自己的库 push 到服务器中去。

  1. 命令 1. git remote add origin https: // github.com/你的账号/你的项目名称   设置远程仓库地址
  2. 命令 2. git push -u origin master 将本地的库推送到 master 分支 (就是推送到服务器上)

git push -u -f origin master(提交到远程仓库,这个命令中的 -f 是强制推送,因为远程仓库只有初始化的文件,所以强制推送上去就行了,不加-f 会报当前分支没有远程分支,强制推送可以覆盖 master,这样就完成了第一次提交的步骤)

git remote -v   查看远程仓库地址
git remote rm origin   删除远程仓库地址

在服务器上查看是否推送成功。

从现在开始,只需要 git push 就可以把本机的代码提交到远程仓库。
git push     (提交 master 分支 到远程仓库)
git push origin 分支名     (提交其他分支 到远程仓库)

获取远程仓库的更新数据:
git fetch:相当于是从远程获取最新到本地,不会自动 merge
git pull:相当于是从远程获取最新版本并 merge 到本地
git pull origin 分支名   更新某个远程分支到本地

从服务器克隆数据, git clone
git clone https://github.com/yanghuaizhi1210/GitTest
将服务器端的数据克隆过来。

如果输入$ git remote add origin git@github.com:djqiang(github 帐号名)/gitdemo(项目名).git
提示出错信息:fatal: remote origin already exists.
解决办法如下:
1、先输入$ git remote rm origin
2、再输入$ git remote add origin git@github.com:djqiang/gitdemo.git 就不会报错了!
3、如果输入$ git remote rm origin 还是报错的话,error: Could not remove config section ‘remote.origin’. 我们需要修改 gitconfig 文件的内容
4、找到你的 github 的安装路径,我的是 C:\Users\ASUS\AppData\Local\GitHub\PortableGit_ca477551eeb4aea0e4ae9fcd3358bd96720bb5c8\etc
5、找到一个名为 gitconfig 的文件,打开它把里面的[remote “origin”]那一行删掉就好了!

生成秘钥:
(1)首先检查电脑是否曾经生成过秘钥
cd /.ssh
若打开该文件夹为空,则表示没有生成过秘钥,进入第二步。(
表示根目录)
(2) 生成秘钥
ssh-keygen -t rsa -C “your email”
命令要求输入密码,不用输,三个回车即可。
执行成功后,会在主目录.ssh 路径下生成两个文件:id_rsa 私钥文件;id_rsa.pub 公钥文件;

登陆 github 帐户点击头像,然后 Settings -> 左栏点击 SSH and GPG keys -> 点击 New SSH key
在远程仓库 gitlab 上添加 title 和 key,和本地的一致。title 可以自己取一个容易区分的名字,key 为 id_rsa.pub 中的内容(全部复制,可用 cat id_rsa.pub 命令打开)

配置了 ssh 秘钥,使用远程仓库的 ssh 地址提交
https://www.cnblogs.com/superGG1990/p/6844952.html


分支操作

查看分支:git branch
当前分支前有 * 号

创建分支:git branch

切换分支:git checkout

创建+切换分支:git checkout -b

合并某分支到当前分支:git merge

删除分支:git branch -d

合并分支:

1、先建一个分支              git branch 分支名

2、切换到新建的分支          git checkout 分支名

3、提交分支上的代码          git add .    git commit -m “提交注释”

4、切换至主分支上            git checkout master

5、然后合并分支              git merge 分支
6、合并完以后就 push           最好先 pull 一次   然后 git push

7、切换到自己的分支          git merge 线上分支名称

设置 git 忽略文件: 1.创建文件:.gitignore 2.忽略文件列表

.gitignore 忽略文件列表

.DS_Store
node_modules/
/dist/
npm-debug.log*
yarn-debug.log*
yarn-error.log*

Editor directories and files

.idea
.vscode
_.suo
.ntvs
_.njsproj
*.sln

如果出现如:
Please enter a commit message to explain why this merge is necessary,# especially if it merges an updated upstream into a topic branch.

1
2
“:wq”是Linux操作系统命令: 表示强制性写入文件并退出。
输入“:wq”,注意是英文输入状态下的冒号,然后按下“Enter”键。

Git Submodule

有的时候我们会遇到仓库嵌套的问题,即一个仓库内部还有一个 git 仓库。这时就需要使用到 git submodule 模块化。

1
git submodule add 远程仓库地址  仓库名/

执行此命令后会在外层仓库根目录下生成一个.gitmodules 文件
如果想删除模块的话,可以执行

1
git rm -r --cached 远程仓库名/,并删除对应的.gitmodules文件中的模块信息

git push 时遇到:![rejected] master -> master(non-fast-forward)的问题

1
2
3
4
1. git pull origin master --allow-unrelated histories 把远程和本地同步,消除差异
2. git add
3. git commit -m
4. git push origin master

git stash

应用场景

  1. 当正在dev分支上开发某个项目,这时项目中出现一个bug,需要紧急修复,但是正在开发的内容只是完成一半,还不想提交,这时可以用git stash命令将修改的内容保存至堆栈区,然后顺利切换到fix分支进行bug修复,修复完成后,再次切回到dev分支,从堆栈中恢复刚刚保存的内容。
  2. 由于疏忽,本应该在dev分支开发的内容,却在master上进行了开发,需要重新切回到dev分支上进行开发,可以用git stash将内容保存至堆栈中,切回到dev分支后,再次恢复内容即可。
    总的来说,git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。这也就是说,stash中的内容不仅仅可以恢复到原先开发的分支,也可以恢复到其他任意指定的分支上。git stash作用的范围包括工作区和暂存区中的内容,也就是说没有提交的内容都会保存至堆栈中。

常用的用法

  1. git stash save “save message” : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
  2. git stash list :查看stash了哪些存储
  3. git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
  4. git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p
  5. git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
  6. git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
  7. git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储
  8. git stash clear :删除所有缓存的stash

SVN 使用

使用 VisualSVN Server 建立版本库
https://www.cnblogs.com/lcyuhe/p/4539696.html