Git的使用

先看一下Git的简介Git的下载和安装

1.当安装Git后首先要做的事情是环境配置,设置用户名称和email地址,每次Git提交都会使用该用户信息。

桌面上右键,点击Git Bash,进入页面

设置提交代码时的用户信息
git config --global user.name “***”
git config --global user.email “***”
查看配置信息
git config --list
git config user.name

2.Git仓库的新建和克隆

在当前目录新建一个Git代码库
git init

新建一个目录,将其初始化为Git代码库
git init 目录名

从远程仓库克隆,下载一个项目和它的整个代码历史,
git clone https://gitee.com/longxiao-tml/c0shi1.git(远程Git仓库地址)

Git 克隆的是该 Git 仓库服务器上的几乎所有数据(包括日志信息、历史记录等),而不仅仅是复制工作所需要的文件。 
当你执行 git clone 命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。

克隆远程项目的不同分支
git clone -b 分支名称 远程Git仓库地址

3.工作目录、暂存区以及版本库概念

版本库:.git隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等,每一个我Git仓库地址都对应一个唯一的版本库。
工作目录(工作区):包含.git文件夹的目录就是工作目录,主要用于存放开发的代码
暂存区:.git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方

4.添加文件到删除区

添加指定文件到暂存区
git add [file1] [file2] ...
例如:git add 1.txt 2.txt

添加指定目录到暂存区,包括子目录
git add [dir]
例如:git add 文件夹的名称
 
添加当前目录的所有文件到暂存区
git add .

删除工作区文件,
$ git rm [file1] [file2] ...
上面删除的只是工作区的文件,需要提交到本地仓库(git commit -m)

将暂存区的文件取消暂存
重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
git reset [file]

重置暂存区与工作区,与上一次commit保持一致
git reset --hard

5.将暂存区的文件修改提交到本地仓库

提交暂存区到仓库区,git commit 将暂存区的所有修改提交到分支
git commit -m “描述信息message”

提交暂存区的指定文件到仓库区
git commit [file1] [file2] ... -m  “描述信息message”

6.远程仓库同步

显示所有远程仓库
git remote -v

显示某个远程仓库的信息
git remote show [remote]
例如:git remote show origin

增加一个新的远程仓库,并命名
git remote add [shortname] [url]
例如:git remote add origin2 https://gitee.com/longxiao-tml/ceshi2.git

取回远程仓库的变化,并与本地分支合并
git pull [remote] [branch]
例如: git pull origin master

上传本地指定分支到远程仓库
git push [remote] [branch]

强行推送当前分支到远程仓库,即使有冲突
git push [remote] --force
例如:git push origin2 --force

推送所有分支到远程仓库
git push [remote] --all

移除无效的远程仓库,已方便该仓库名指定新的仓库
git remote rm [remote]
注意:此命令只是从本地移除远程仓库的记录,并不会真正影响到远程仓库

7.Git分支
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。Git 的master分支并不是一个特殊分支。 它跟其它分支没有区别。 之所以几乎每一个仓库都有 master 分支,是因为git init 命令默认创建它,并且大多数人都懒得去改动它。

列出所有本地分支
git branch

列出所有远程分支
git branch -r

列出所有本地分支和远程分支
git branch -a

新建一个分支,但依然停留在当前分支
git branch [branch-name]

在当前分支下,新建一个分支,切换到该分支(没有就创建)
git checkout -b [branch]

把本地当前分支的内容,推送至远程仓库分支
git push [remote] [branch]
例如:git push origin dev

切换到指定分支,并更新工作区
git checkout [branch-name]

切换到上一个分支
git checkout -

合并指定分支到当前分支
git merge [branch]

删除本地分支
git branch -d [branch-name]
如果要删除的分支中进行了一些开发动作,此时执行上面的删除命令并不会删除分支,如果坚持要删除此分支,可以将命令中的-d参数改为-D

删除远程分支
git branch -r -d [remote]/[branch]
git push [remote] :[branch]
例子:
git branch -r -d origin/dev
git push origin :dev

如果远程新建了一个分支,本地没有分支
git checkout --track [remote]/[branch](origin/dev) 
这样在本地会新建一个分支,会自动跟踪远程的同名分支

重命名分支
git branch -m 当前分支名 新的分支名

8.Git标签(tag)

Git 可以给历史中的某一个提交打上标签。 比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 、v1.2等)。标签指的是某个分支某个特定时间点的状态。通过标签,可以很方便的切换到标记时的状态。标签和commit绑在一起。


列出所有tag
git tag

查看tag信息
git show [tag]

新建一个tag在当前commit
git tag [tag]

默认标签是打在最新提交的commit

给之前的某次提交打上标签
git tag v1.0 [commit id]

提交指定tag
git push [remote] [tag]
例子:git push origin v0.1

新建一个分支,指向某个tag
git checkout -b [branch] [tag]

删除本地tag
git tag -d [tag]

删除远程tag
git push origin :refs/tags/[tagName]

提交所有tag
git push [remote] --tags

还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:
git tag -a v0.1 -m "version 0.1 released" 1094adb

标签是按时间顺序列出的,用git show v1.0(tagname)可以查看标签信息,还可以看到说明文字

9.查看信息

显示有变更的文件,查看文件状态
git status

显示当前分支的版本历史
git log

显示commit历史,以及每次commit发生变更的文件
git log --stat

搜索提交历史,根据关键词
git log -S [keyword]

显示某个commit之后的所有变动,每个commit占据一行
git log [tag] HEAD --pretty=format:%s

显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
git log [tag] HEAD --grep feature

显示某个文件的版本历史,包括文件改名
git log --follow [file]
git whatchanged [file]

显示指定文件相关的每一次diff
git log -p [file]

显示过去5次提交
git log -5 --pretty --oneline

显示所有提交过的用户,按提交次数排序
git shortlog -sn

显示指定文件是什么人在什么时间修改过
git blame [file]

显示暂存区和工作区的差异
git diff

显示暂存区和上一个commit的差异
git diff --cached [file]

显示工作区与当前分支最新commit之间的差异
it diff HEAD

显示两次提交之间的差异
git diff [first-branch]...[second-branch]

显示今天你写了多少行代码
git diff --shortstat "@{0 day ago}"

显示某次提交的元数据和内容变化
git show [commit]

显示某次提交发生变化的文件
git show --name-only [commit]

显示某次提交时,某个文件的内容
git show [commit]:[filename]

显示当前分支的最近几次提交
git reflog

10.将本地项目添加到远程Git仓库

1. 进入项目根文件夹,首先通过init命令初始化本地仓库
git init

2.通过如下命令添加所有文件到暂存箱
git add .

3.通过commit命令通知git,把文件提交到仓库
git commit -m “本次提交的描述信息”

4.关联到远程仓库,http这里的链接是你的远程仓库地址链接
git remote add origin https://git.com/foo/foo_foo/foo.git

5.远程库与本地库合并,远程仓库不为空的话,此步骤必须进行,否则会导致提交失败。
git pull --rebase origin master

6.把本地库推送到远程仓库,此操作实际上是把当前分支提交到远程仓库。
git push -u origin master

7.查询状态
git status

11,小结

同一个.git文件只能提交到这个指定的项目地址上,如果你想将同一份文件提交到不同的Gir项目地址上,那么你就需要把此项目的.git文件替换成要提交的另一个Git项目的.git文件。

origin只是指向不同Git项目的地址,当你push的时候,只是push origin所指向的Git地址,当origin1和origin2指向同一个地址的时候,并没有什么区别。

12.合并分支  解决冲突

准备新的分支
git switch -c feature

修改1.txt中最后一行的文件内容

在feature分支上提交
git add 1.txt
git commit -m "e1"

切换到master分支
git switch master

在master分支上对1.txt文件的最后一行进行修改,然后提交

git add 1.txt
git commit -m "e2"

然后合并
git merge feature

然后就会报错

然后显示文件冲突

打开文件会看到上图所示的样子

这三个符号

======号表示分割线

<<<<<号到======号之间表示当前分支内容
======号到>>>>>号之间表示分支合并进来的内容
接下来我们就要自己手动整合到一起了,把不需要的删除就好了,然后重新add,commit就好了。

13.版本回退

git log 命令显示从最近到最远的提交日志,一大串的字符就是commit id(版本号)

在Git中,用HEAD表示当前版本,也就是最新的提交commit id,上一个版本就是HEAD^,上上个版本就是HEAD^^,往上100个版本可以写成HEAD~100

所以我们回退到上一个版本,就可以用:git reset --hard HEAD^

这时候们再用git log,发现最新版本的那个commit id已经没有了,这时,只要上面的命令行窗口还没有关掉,我们可以向上找到哪个commit id,

关闭窗口之后,你也可以在远程的Git仓库中找到哪一次提交的commit id

这里假如是1094adc....,于是我们使用 : git reset --hard1094a,命令,就可以回到最新的那个版本了,版本号没有必要写全,前几位就可以了,Git会自动去找。

14.临界区提交

提交到临界区的,关闭窗口之后,提交到临界区的还在
git status 可以查看临界区新添了什么文件
git ls-files 可以查看临界区有什么文件
rm .git/index 清空暂存区,
暂存区就是.git目录下的一个index文件,当删除暂存区内容的时候,其实就是删除index文件中的内容,.git/objects目录中的内容不会被删除。
删除临界区的某一个文件,上面有说明

15.Bug分支

当你工作项目进行到一半时,在dev分支上的项目无法提交,但是又要在短时间内修改一个bug,这时候需要用到stash功能。

git stash 把工作现场存储起来,然后用git status 查看工作区就是干净的了,然后切换到master分支上,创建一个临时分支改bug,然后就合并

然后切换到dev分支,使用: git status,查看工作区是干净的,然后使用git stash list 命令查看,Git把stash内容存起来了,

一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

另一种方式是用git stash pop,恢复的同时把stash内容也删了:

你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:

$ git stash apply stash@{0}

 如果那个bug也在dev分支上怎么办?我们找到之前提交修改的commit id,然后在本分支下,使用git cherry-pick [commit id],就能把dev上的bug修复好,这次的commit id不同于之前的id,但是改动相同。

16.在Git输出查看的某个东西,无法输入命令时,输入q+回车即可退出显示,重新输入命令。

17.分支在本地可以自己藏着玩儿,是否推送看你自己的心情。

18.当别的同事,在分支上进行了修改并提交,然后你也要提交时,就会推送失败,因为你的小伙伴的最新提交和你试图推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送:

git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置devorigin/dev的链接:

$ git branch --set-upstream-to=origin/dev dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.

 再pull,这回git pull成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突完全一样。解决后,提交,再push,就ok了

git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建

19.rebase操作可以把本地未push的分叉提交历史整理成直线;rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

20.如何恢复误删的分支

使用 git reflog 命令查看所有分支的所有操作记录(包括commit和reset的操作),包括已经被删除的commit记录

找到误删分支的最后一次的提交记录的commit id

然后使用命令 : git chechout -b 分支名  误删分支最后一次提交的id

21.远程仓库回滚

https://blog.csdn.net/weixin_33813128/article/details/92377349

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值