git基本操作

在本地创建版本库并推送到远程:

创建本地版本库

$ git init
在本地创建版本库:可以是空的文件夹,也可以是有内容的文件夹
不管是空文件夹还是非空文件夹都会
Initialized empty Git repository
提示这是一个空的版本库

空文件夹的话需要放入相应需要添加的文件

$ git add .
把文件添加到仓库

$ git commit -m 'first commit'
把文件提交到仓库

至此,本地版本库建好了

远程Create a new repository

填入仓库名称和Description,其他保持默认配置

$ git remote add origin git@github.com:wangtongbef/wt-project.git
关联远程仓库(空库可实现)

如果本地库是空的那么可以关联远程库但是不可以推送分支

$ git push -u origin master
把当前分支master推送到远程(空库不可实现)
-u 表示把本地的master分支和远程的master分支关联起来

至此本地仓库顺利添加到远程并与master分支关联

分支管理练习

$ git branch -vv
显示本地分支与远程分支的对应关系

$ git checkout -b dev origin/dev
有origin/dev时 在本地创建并切换到相应的dev分支 此时 dev与origin/dev 已经关联

$ git checkout master
切换到master分支
$ git checkout -b dev
创建并切换到新的dev分支 :此时没有相对应的远程分支
创建的分支指向当前分支最新的一步

$ git push origin dev
将本地该分支上的所有本地提交推送到远程库  并会添加一个dev远程库 dev与origin/dev 并没有关联

$ git branch --set-upstream-to=origin/dev dev
将本地dev与origin/dev相关联

报错:fatal: refusing to merge unrelated histories(拒绝合并不相关的历史)
http://confluence.cmrh.com/pages/viewpage.action?pageId=56344452 $ git merge dev 将dev分支合并到当前分支 此时只是本地版本库的变化,还需要git push一下 $ git branch -d dev 删除本地库中的dev分支 $ git branch -D dev 强制删除未合并的本地库的dev分支 $ git remote 查看远程库的信息 $ git remote -v 显示可以抓取和推送的origin的地址 如果没有推送权限 就看不到push的地址

$ git remote rm origin git与远程库解绑:origin为远程库名称

$ git branch -r -d origin/dev $ git push origin :dev 两行代码合起来可以做删除远程分支的操作 $git checkout -b 本地分支名 origin/远程分支名 将远程git仓库里的指定分支拉取到本地(本地不存在的分支)

git合并分支(未验证)

git合并分支可以借鉴:
https://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0%E5%BB%BA%E4%B8%8E%E5%90%88%E5%B9%B6
$ git merge{ $ git cherry-pick 38361a68 将特定的提交合并到本分支(已验证) $ git merge dev 如果待合并的分支在当前分支的下游,也就是说没有分叉时,会发生快速合并,这种方法相当于直接把master分支移动到test分支所在的地方,并移动HEAD指针 $ git merge --no-ff dev 这种合并方法会在master分支上新建一个提交节点,从而完成合并,此时dev分支得以保存,log不变(适用于有不同提交的分支) $ git log --graph --pretty=oneline --abbrev-commit 分支详细历史:包括--no-ff合并历史,以图形的方式显示,很直观 $ git rebase dev 将master分支上的多余提交重新在dev上提交一次,然后将master的指针指向最新的提交,dev分支的指针不变化 在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行: $ git rebase --continue 这样git会继续应用(apply)余下的补丁。 $ git rebase --abort 在任何时候,你可以用--abort参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。 }

gitLab浏览器合并

参考:1,提交并接受合并 —— https://blog.csdn.net/weixin_43606948/article/details/85489257

2,提交合并请求 —— https://blog.csdn.net/weixin_44253425/article/details/92797933

3,接受合并请求 —— https://blog.csdn.net/weixin_44253425/article/details/92798189

git对比两个分支差异

$ git log dev ^master
查看dev有 而master中没有的

$ git log master ^dev
查看master有 而dev中没有的

$ git log master..dev
查看dev中比master中多提交了哪些内容
列出来的是两个点后边(此处即dev)多提交的内容。
同理,想知道 master 比 dev 多提交了什么
$ git log dev..master

$ git log dev...master
不知道谁提交的多谁提交的少,单纯想知道有什么不一样
在上述情况下,再显示出每个提交是在哪个分支上:
$ git log --left-right dev...master
注意 commit 后面的箭头,根据我们在 –left-right dev…master 的顺序,左箭头 < 表示是 dev 的,右箭头 > 表示是 master的。
指向谁代表是那个分支的提交

修改用户名与邮箱(修改Windows10下用户名密码)

$ git config user.name
查看用户名
$ git config user.email
查看邮箱
$ git config --global user.name 'wangtong'
修改用户名

$ git config --global user.email wangt173111@163.com
修改邮箱

Windows10下更换Git用户名或密码
https://jingyan.baidu.com/article/642c9d3435a6e9644a46f732.html

版本回退

$ git checkout .
放弃工作区所有修改

$ git reset
撤销add操作

git commit 之后 撤销commit

$ git reset --soft HEAD^
不删除工作空间改动代码,撤销commit,不撤销git add . 

git reset 参数详解:
HEAD^的意思是上一个版本,也可以写成HEAD~1 如果你进行了2次commit,想都撤回,可以使用HEAD~2
--mixed 不删除工作空间改动代码,撤销commit,并且撤销git add . 操作 这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
--soft 不删除工作空间改动代码,撤销commit,不撤销git add .
--hard 删除工作空间改动代码,撤销commit,撤销git add . 注意完成这个操作后,就恢复到了上一次的commit状态。
git commit --amend commit注释写错了,想改一下注释,会进入默认vim编辑器,修改注释完毕后保存就好了 $ git log 查看版本详细历史,基准为commit $ git log --pretty=oneline 查看版本简略历史,多条 $ git reflog 查看版本库变化命令历史多条 $ git reset --hard 2f640ed 指定回退到某一版本或某一命令 $ git reset --hard HEAD^ 回退到上一个版本

git stash将所有未提交的修改(工作区和暂存区)保存至堆栈中,用于后续恢复当前工作目录

https://www.cnblogs.com/zndxall/archive/2018/09/04/9586088.html
https://blog.csdn.net/stone_yw/article/details/80795669

检查本地的代码修改情况

git diff 可以查看当前没有add 的内容修改(不在缓冲区的文件变化)
git diff --cached查看已经add但没有commit 的改动(在缓冲区的文件变化)
git diff HEAD 是上面两条命令的合并

打tag(暂时没用,后续整理)

posted @ 2019-10-17 09:53  雨打芭蕉wt  阅读(179)  评论(0编辑  收藏  举报