深入理解git以及git常用的命令

知识储备:git的工作区、暂存区以及版本库

工作区:就是你在电脑里能看到的目录。
暂存区:英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。

1.git配置用户名和邮箱
$ git config --global user.name "username"

$ git config --global user.email "email"
2.查看配置过的用户名和邮箱
$ git config user.name

$ git config user.email
3.git创建版本库

git init
Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令。
在执行完成 git init 命令后,Git 仓库会生成一个 .git 目录,该目录包含了资源的所有元数据,是Git来跟踪管理版本库的,其他的项目目录保持不变(不像 SVN 会在每个子目录生成 .svn 目录,Git 只在仓库的根目录生成 .git 目录)。

4.基本用法

git add files 把当前文件放入暂存区域。
git commit -m “说明信息” 给暂存区域生成快照并提交。
git reset – files 用来撤销最后一次git add files,你也可以用git reset 撤销所有暂存区域文件。
git checkout – files 把文件从暂存区域复制到工作目录,用来丢弃本地修改。
git log显示从最近到最远的提交日志,该指令可以告诉我们历史记录,可以看到有版本号、提交人以及提交日期,若是觉得显示内容过于冗余,可以git log --pretty=oneline指令来查看日志

5.关于版本回退

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交的版本,上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100,要回退到上一个版本就使用git reset命令

git reset --hard HEAD^

此时用git log查看一下日志就会发现最新的那个版本已经消失,现在已经回退到上一个版本了。
emmm…突然发现自己好像之前的才是对的,现在已经进行版本回退了,怎么办?重写是不可能重写的,永远也不可能,这时候只要使用git reset --hard 版本号即可回到未来的某个版本,但是这个版本号能找到是基于你没有关闭git bash这个窗口的基础上,如果你已经关闭了这个窗口或者已经关闭了电脑,你再想回到未来的某个版本怎么办?不用担心,此时只需使用git relog命令即可查看之前的版本号啦~

6.关于撤销修改

1.修改了东西,但是没有进行git add和git commit操作,此时可以使用git status查看状态,可以发现如下提示:

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

你可以使用git add . 将代码添加到暂存区,也可使用git checkout --<文件>丢弃工作区的修改
2.修改了东西,而且进行了git add <文件名>的操作,此时用git status查看状态,可以发现如下提示:

$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

Git同样告诉我们,用命令git reset HEAD <文件>可以把暂存区的修改撤销掉(unstage),重新放回工作区,假设被修改过的文件名为readme.txt

$ git reset HEAD  readme.txt
Unstaged changes after reset:
M	readme.txt

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

再用git status查看一下,现在暂存区是干净的,工作区有修改:

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

	modified:   readme.txt

此时只需要再将工作区的修改丢弃掉

$ git checkout -- readme.txt

此时再用git status查看状态,可以发现文件已经完全将修改舍弃了

$ git status
On branch master
nothing to commit, working tree clean

3.修改了东西,而且并执行了git add .和git commit -m “说明信息”,此时利用git reset --hard 版本号进行版本回退,但是这个前提是你没有将代码提交到远程仓库

三种情况总结如下:

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
7.连接远程仓库和本地仓库

1.现有本地仓库,然后想将本地仓库与远程仓库建立连接

要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

2.现有远程仓库,然后想将远程仓库克隆到本地仓库

git   clone   仓库地址
8.分支管理

创建分支dev,并切换到dev分支

$ git checkout -b dev
或者使用$ git switch -c dev

查看分支

$ git branch

执行git add * 和git commit -m “提交”
切换到master分支,然后我们把dev分支的工作成果合并到master分支上:

$ git checkout master或者使用$ git  switch  master
$ git merge  dev

合并完成后,可以删除分支

$ git branch -d dev
9.Git 工具 - 储藏(Stashing)

经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。“‘储藏”“可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。

$ git  stash

然后查看利用git status查看工作区,就是干净的,然后想在哪个分支修改东西就可以切换分支去修改了,修改完成后在切换回原来的分支进行未完成的工作

$ git status
On branch dev
nothing to commit, working tree clean

用git status查看状态发现工作区是干净的,那刚才的东西存到哪去了?利用git stash list命令查看

$ git stash list
stash@{0}: WIP on dev: f52c633 add merge

工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了:
你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:

$ git stash apply stash@{0}
10.Feature分支

开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D 分支名强行删除。

11.远程仓库

查看远程仓库的信息,使用git remote命令

$ git remote
origin

或者,用git remote -v显示更详细的信息:

$ git remote -v
origin  git@github.com:wujuan/first.git (fetch)
origin  git@github.com:wujuan/two.git (push)

上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。
推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:

$ git push -u origin 分支名

建立本地分支和远程分支的关联,使用

git branch --set-upstream branch-name origin/branch-name;

有一种情况是可能你在提交的时候会有别的人已经提交了代码,所以避免冲突,可以先用git pull将别人的代码下拉下来,然后再手动修改代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值