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
分支的链接,根据提示,设置dev
和origin/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