Git操作
文章目录
1、git的命令操作(本地操作)
1.1、初始化本地仓库。
git init:
初始化本地仓库(注意:执行完成之后当前的目录下会生产一个 .git的文件,里面包含了git的一些配置,以及其他的子目录,不能删除,一般情况下也不要去修改)
1.2、设置签名。
-
git config:
设置git签名:项目/仓库级别,默认会优先使用的签名-
git config user.name haizi_pro
-
git config user.email haiziGood_pro@guoshi.com
-
设置的信息保存在
./git/confg
中 -
$ cat config [core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true [user] name = haizi emial = haizi@guoshi.com
-
-
git config --global:
设置git签名:系统级别全局使用-
git config --global user.name haizi
-
git config --global user.email haiziGood@guoshi.com
-
全局签名设置的信息保存在“家”目录下的
.gitconfig
文件里面 -
$ cd ~ #进入家目录,windows下也是一样的操作 haizi@haizi MINGW64 ~ $ cat .gitconfig [user] name = haizi email = xxxx@xxx.com
注意:无论是git的项目签名还是系统签名都是用于git区别提交者的,而不是用于远程仓库的登录验证的。
-
1.3、查看工作区和暂存区的状态。
-
git status:
查看当前仓库下的git的工作区和暂存区的状态。-
$ git status On branch master #表示当前所在的分支为master(主分支)分支 No commits yet #表示当前仓库没有任何提交记录 nothing to commit (create/copy files and use "git add" to track) #表示暂存区没有任何文件可以提交到仓库(可以创建或者复制文件到当前工作区,通过git add 命令让git来进行管理这些文件)
-
1.4、将文件添加到暂存区。
git add:
将当前工作区的文件添加到暂存区交给git进行追踪管理。git add filename:
指定要添加到暂存区的文件
1.5、提交暂存区文件到本地仓库。
git commit -m "my info":
将暂存区的文件提交到本地仓库
1.6、查看本地仓库的提交日志。
-
git log:
查看本地提交的日志-
haizi@haizi MINGW64 /e/其他文件/gittest (master) $ git log commit 951f2b119074a4745330ef699ac836969628762d (HEAD -> master) Author: haizi <110417ldh> Date: Wed Jul 29 22:22:48 2020 +0800 haizi
-
但是上面显示的太详细了,在日志比较多的时候看起来不方便所以就有了下面的方法hi
-
git log --pretty=oneline:
单行显示 -
$ git log --pretty=oneline 951f2b119074a4745330ef699ac836969628762d (HEAD -> master) haizi
-
还有类似的
git log --oneline
-
$ git log --oneline 951f2b1 (HEAD -> master) haizi
-
git relog:
这个命令也是查看日志的 -
$ git reflog 951f2b1 (HEAD -> master) HEAD@{0}: commit (initial): haizi
-
与之前的不同的是,这里会显示指针所指向的当前的索引
-
1.7、基于日志进行工作区版本的回退和前进。
-
git reset --hard 版本哈希值
:推荐使用这种方式它可以完成版本的前进和后退-
$ git reflog fc0ed51 (HEAD -> master) HEAD@{0}: reset: moving to fc0ed51 6aacde3 HEAD@{1}: commit: is you fc0ed51 (HEAD -> master) HEAD@{2}: commit: godd man 951f2b1 HEAD@{3}: commit (initial): haizi haizi@haizi MINGW64 /e/其他文件/gittest (master) $ git reset --hard 951f2b1 HEAD is now at 951f2b1 haizi haizi@haizi MINGW64 /e/其他文件/gittest (master) $ git reflog 951f2b1 (HEAD -> master) HEAD@{0}: reset: moving to 951f2b1 fc0ed51 HEAD@{1}: reset: moving to fc0ed51 6aacde3 HEAD@{2}: commit: is you fc0ed51 HEAD@{3}: commit: godd man 951f2b1 (HEAD -> master) HEAD@{4}: commit (initial): haizi
-
-
git reset -- hard HEAD^:
关键是^
这个符号,一个表示hou’tuihoutui 一个版本n个表示后退n个版本 -
git reset –-hard HEAD~n:
n表示后退n次
1.8、比较文件
-
git diff 文件名:
-
$ git diff test.txt diff --git a/test.txt b/test.txt index 3d8e518..df012f6 100644 --- a/test.txt +++ b/test.txt @@ -2,5 +2,5 @@ aasxax xasx xasxas xas -xas +海哥就是牛逼
-
-
git diff:
不带文件名可以比较多个文件 -
git diff [本地库中的历史版本][文件名] :
与历史版本进行比较-
$ git diff HEAD diff --git a/test.txt b/test.txt index 3d8e518..df012f6 100644 --- a/test.txt +++ b/test.txt @@ -2,5 +2,5 @@ aasxax xasx xasxas xas -xas +海哥就是牛逼
-
1.9、分支操作
-
git branch xxxx:
创建分支 -
git branch -v:
检查所有的分支 -
git checkout xxxx:
切换分支 -
合并分支:(在合并前要切换分支到拉去合并的分支上,一般就是我们的主干分支)
-
haizi@haizi MINGW64 /e/其他文件/gittest (master) $ git checkout master #1.切换分支到master分支上 Already on 'master' haizi@haizi MINGW64 /e/其他文件/gittest (master) $ git merge hot_fix #2.合并hot_fix分支到master分支上 Updating 1f99c9b..714d40b Fast-forward test.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) haizi@haizi MINGW64 /e/其他文件/gittest (master)
-
解决冲突:当两个分支修改了同一个文件的同一位置的代码时,在进行分支合并的时候会产生文件冲突,这时就要来进行处理
-
$ git merge hot_fix ##这里产生了冲突 Auto-merging test.txt CONFLICT (content): Merge conflict in test.txt Automatic merge failed; fix conflicts and then commit the result. haizi@haizi MINGW64 /e/其他文件/gittest (master|MERGING)#当前就是处于解决冲突的环境 ##然后暗转上面的指示利用vim去查看冲突的文件 1 aasxax 2 xasx 3 xasxas 4 xas 5 海哥就是牛逼 6 <<<<<<< HEAD #这里是指当前分支的 状态,解决后要删除改提示 7 你瞅啥? #第7和第9行就是冲突的地方 8 ======= # 这个也要删除 9 你瞅啥?瞅你咋地? 10 >>>>>>> hot_fix #这里指被合并分支的状态,解决后要删除该提示 ~ ##然后 haizi@haizi MINGW64 /e/其他文件/gittest (master|MERGING) $ git add test.txt haizi@haizi MINGW64 /e/其他文件/gittest (master|MERGING) $ git commit -m "解决冲突" ##注意这里不能带文件名 [master a0ae228] 解决冲突 haizi@haizi MINGW64 /e/其他文件/gittest (master) $ git status On branch master nothing to commit, working tree clean haizi@haizi MINGW64 /e/其他文件/gittest (master)
-
2、Git基本原理了解
1.git,时通过Hash算法对文件验证的,每次提交都会在本地生成一个hash值,在push的时候也会将这个值puhs到远程,然后再与远程的进行比较,来验证文件的完整性。
2.git是基于快照的方式进行版本保存的,每个版本都是完整,当然为了节约空间,对于没有修改的文件,是直接通过指针指向上一个文件的地址的,
3.git对分支的处理也非常棒,给每个分支一个指针来指向对应的版本。
1.分支创建
2.分支切换
3.分支提交操作
4.切换分支进行提交操作5.未合并的分支接下来的走势
3、Git远程操作
3.1、给本地仓库添加远程地址
git remote -v:
查看本地仓库的远程地址git remote add orgin https://github.com/Hxxxxx/xxxx.git:
给本地仓库添加远程地址可以使用此命令添给一个本地仓库添加多个远程仓库,注意origin 不能重复
3.2、删除远程地址
git remote remove origin 删除即可
3.3、修改远程仓库地址
git remote set-url origin <url>
3.4、将本地代码推送到远程仓库
git push origin master
3.5、克隆远程库到本地
git clone https://github.com/Hxxxxx/xxxx.git
3.6、拉取远程仓库更新的代码
git fetch origin master:
拉去远程库到本地仓库的暂存区git checkout origin/master
查看我们拉去下来的新的内容git merge origin/master:
将拉去到暂存区的远程代码合并到本地库中git pull=git fetch+git merge
3.7、拉取某个分支的代码到本地(本地不存在该分支)
git clone -b develop XXX
:
如果出现如下的错误
fatal: Cannot update paths and switch to branch 'dev2' at the same time.
Did you intend to checkout 'origin/dev2' which can not be resolved as commit?
表示拉取不成功。我们需要先执行
git fetch
然后再执行
git checkout -b 本地分支名 origin/远程分支名
3.8、推送修改到远程库
git push origin master:
将本地修改的代码推送到远程仓库。- 如果推送时,本地仓库不是基于远程仓库的最新版修改的,会被拒绝推送,需要先拉去远程仓库的代码,然后进行冲突解决,再合并,最后才能推送,冲突解决的具体办法,和解决分支冲突是一样的。
3.8、跨团队协作开发
- fork团队的远程仓库到自己的远程仓库中。
- 从自己的远程仓库克隆到本地进行修改。
- 修改完成之后提交到自己的远程仓库。
- 创建一个Pull Request选择目标分支之后提交。
- 由团队分支的负责人审查代码,ok之后merge到主分支上。
4、SSH免密登录
#1.进入当前用户的家目录
cd ~
#2.删除.ssh目录
rm -rvf .ssh
#3.运行命令重新生成.ssh密钥目录
ssh-keygen -t rsa -C haizi@qq.com
#4.进入.ssh目录查看文件列表
cd .ssh
ls -if
#5.查看id_rsa.pub文件内容,并复制
cat id_ras.pub
#6.去远程仓库添加复制的密钥