Git使用
远程仓库
Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上。怎么分布呢?最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以“克隆”这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分。
GitHub添加远程仓库
-
首先安装git程序,按照默认项安装即可
-
安装打开git bash应用程序
-
设置全局用户名和邮箱
$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com"
该配置信息在用户/管理员目录中可以查看到
-
通过cd指令切换目录并在合适的地方创建一个空目录
$ cd f:/git //删除目录指令 $ rm -r java-advance/ //删除普通文件指令 $ rm -r readme.md $ mkdir leetcode $ cd leetcode/ $ mkdir dp $ cd dp $ git init
git init初始化之后,目录下会生成一个.git目录,(跟踪版本管理库)
查看该目录是否存在的指令$ ls -ah
将文件添加到版本库
- 先把文件放到git bash当前目录下
首先用git add 命令,把文件添加到仓库:
再使用git commit命令,把文件提交到仓库:$ git add a.java
$ git commit -m "wrote the climbStair file" [master (root-commit) f94896c] wrote the climbStair file 1 file changed, 16 insertions(+) create mode 100644 ClimbStair.java
- 修改java文件,把文件内容修改后可以通过git status查看仓库当前的状态
上述表明文件经过了修改,但并没有准备提交$ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: ClimbStair.java no changes added to commit (use "git add" and/or "git commit -a")
- 通过git diff查看我们是如何修改这个java文件的
$ git diff ClimbStair.java diff --git a/ClimbStair.java b/ClimbStair.java index 3f4f04e..73e2eab 100644 --- a/ClimbStair.java +++ b/ClimbStair.java @@ -12,5 +12,6 @@ public class ClimbStair { dp[i] = Math.min(dp[i-1] + cost[i], dp[i-2] + cost[i]); } return Math.min(dp[len-1], dp[len-2]); + //changed file // **表明该行是新添加的** } } \ No newline at end of file
- git add之后可查看status:
add之前是not stage,add之后是to be committed$ git status On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: ClimbStair.java
commit之后,没有需要提交的修改,工作区干净$ git status On branch master nothing to commit, working tree clean
版本切换
- 先通过get log或者 get log --pretty=oneline 展示日志信息
$ git log --pretty=oneline 674606b6b46fbac3caec7578872ad54c44d83913 (HEAD -> master) add distributed f94896c00bc1dc91a7c13a2719a6ade76996ec89 wrote the climbStair file
- 通过git reset指令把java文件回退到上一个版本
此时已经回退到上一个版本了$ git reset --hard HEAD^ HEAD is now at f94896c wrote the climbStair file
- 此时通过git reset --hard id(前几位,只要能够与其他id区分开即可)将文件转到指定id版本。
$ git reset --hard 6746 HEAD is now at 674606b add distributed
工作区和暂存区
创建的比如dp目录,就是一个工作区(Working Directory)
隐藏目录.git就是git的版本库,版本库里面的index(Stage)就是暂存区
git为我们自动创建了一个master分支
指向master的指针叫做HEAD
把文件添加到Git的两步走策略
- 用git add把文件修改添加到暂存区stage
- 用git commit提交更改,把暂存区的内容提交到当前分支(当前只有一个master分支)
如果在git中先把工作区中的文件提交了,然后再对工作区中的文件进行修改,修改完成后提交只会提交stage中的修改部分
即:
修改文件=>git add文件=>修改文件=>git commit
这样操作过后第二次的修改并没有提交
提交后,我们可以用 git diff HEAD – readme.txt 命令去查看工作区和版本库里面最新版本的区别
撤销修改
- 如果还没提交到暂存区,则直接使用git checkout – fileName把文件在工作区全部修改给撤销掉
- 如果已经git add了,还没有commit
需要把暂存区的修改撤销掉重新放回工作区
然后丢弃工作区的修改就OK了$ git reset HEAD readme.txt //git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区,HEAD表示最新版本。 Unstaged changes after reset:M readme.txt
- 既add了,又commit了之后则回退到上一个版本,回退版本内容。
删除文件
删除文件分为删除工作区文件和删除版本库文件
- 删除工作区文件:
$ rm LICENSE.txt
- 删除工作区文件后,版本库中文件依然存在,可以用版本库中文件恢复工作区文件:
git
- 要是要从版本库中删除文件,就在签名指令加一个git
此时工作区与版本库中的文件就全部被删除了
本地仓库与与服务器传输
本地Git仓库和GitHub仓库之间的传输是通过SSH加密,故而需要创建SSH Key,
$ ssh-keygen -t rsa -C "youremail@example.com"
可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人
GitHub添加公钥
个人中心=>setting=>SSH & GPG keys=>将ras.pub中的内容完整复制到Key内
注意,第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告。因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了
链接GitHub
在本地中断输入命令行:
ssh -T git@github.com
下方显示successful表示链接成功
连接GitHub上的仓库
$ git remote add origin https://github.com/zdh2018/leetcode-dp.git
或者
$ git remote add origin git@github.com:zdh2018/leetcode-dp.git
通过git remote -v可以查看是否连接上了本地仓库
然后推送本地代码到GitHub仓库
$ git push -u origin master
第一次要加-u,将本地的master内容与远程的master关联起来
将GitHub仓库的代码同步到本地
$ git pull origin master --allow-unrelated-histories
删除远程库
实际上为解除本地和远程仓库关系
$ git remote rm origin
GitHub上删除某个文件
GitHub上只能删除仓库,却不能删除文件或者文件夹,只能通过指令来实现删除。
$ git pull origin master
$ dir
$ git rm -r --cached target
$ git commit -m "delete targer"
$ git push -u origin master
//操作完成