1.安装及GIT基础使用
安装git和git小乌龟
安装小乌龟(在setting->network->修改ssh.exe的路径)
2. 生成公钥:【公司的git服务器界面就会有相关方法】
# 使用ssh-keygen命令生成公钥,并配置到远程库的界面上
ssh-keygen
#【家目录的 .ssh目录中的 .pub文件】
3. 配置用户名和邮箱
#【家目录的.gitconfig文件】
git config --global user.name 工号
git config --global user.email 自己的公司邮箱
4.克隆代码 (只有第一次需要)
git clone 网址【ssh协议和https协议】(需要有权限/申请)
5. 本地创建新的分的分支
# 本地master只做备份分支预留
git branch + 分支名
git checkout 分支名
# 创建分支并切换
git checkout -b 分支名
6. 编辑代码(工作区)
# 保存到暂存区;注意:add的文件一定是自己想提交的文件
git add 文件名
git add . # 点表示当前目录下的所有修改
7. 提交到本地库
git commit -m "提交这个代码原因"
git commit
直接 git commit (适用于需要提交的描述信息比较长的时候)执行后会直接进入到一个编辑模式,在里面编辑写入你的描述信息,然后 Shift 键 + : wq 保存即可
8. 推送到远程分支
git push origin 本地分支名:远程分支名
9.在远程界面创建一个merge请求
git pull origin 远程分支
(1)出现【rejected】拒绝的错误(原因主要是本地的提交和原master上的提交出现分叉)
解决方法一(建议):
1、git pull origin master
2、会进入一个vim界面
3、直接保存退出
解决方法二(建议):
1、git pull
(可能需要操作的)
2、git branch --set-upstream-to=origin/远程分支名 本地分支名
3、git pull
4、会进入一个vim界面
5、直接保存退出
解决方法三:
1、git pull --no-edit
解决方法四(建议):
1、git pull --rebase
解决办法五(更建议):
【git rebase会进行变基操作,不会让git的提交记录出现分叉】【注意进行
git rebase后的push命令可能需要增加-f选项】
1、git fetch
2、git rebase 【或者git rebase origin/master】
1、git fetch
2、git rebase 【或者git rebase origin/master】
(2)git fetch 和 git pull的区别
git fetch 只会拉取最新的代码,不会合并到当前分支中,需要使用git merge命令进行合并
git pull 拉取并合并
git pull == git fetch + git merge
git pull --rebase == git fetch + git rebase
(3)拉代码时显示出现冲突(请查看如何处理冲突章节)
(4)当拉代码提示"你本地有修改commit或者需要stash的时候",拉不下来代码
解决方法一:
1)临时保存当前的修改 git stash
2)重新拉代码 git pull origin master
3)还原之前临时保存的修改 git stash pop
4)如果还原的时候,没有冲突,就继续操作就可以
如果还原的时候,有冲突,则需要解决冲突
5)git diff 查看冲突的文件
6)处理冲突 vim 冲突的文件 (注意!!!)
7)git add .
8)git commit -m "消息体"
9)git push origin 本地分支:远程分支名
解决方法二:
1)备份下这些修改的文件【因为操作后就找不回已经修改的代码啦】
2)命令行中的操作
git status
git restore 误修改的文件 或者 git reset --hard (高危操作,提前保存备份的
文件)
小乌龟的操作
git revert
3) 把自己的修改重新添加进去【替换的时候,一定要进行比对】
命令行操作:
第二次commit时需要加--amend
git commit --amend -m "信息"
git push origin -f 本地分支名:远程分支名
命令行操作:
使用git log + git rebase -i命令进行合并
(1)查找要合并的几条记录的上一条记录的commit-id值
git log
(2)使用git rebase -i 进行合并处理
git rebase -i 2e48fb163795dba2a054da4f34674c6bf5f84d27
p表示保留
s表示合并到上一条记录
d表示删除
(3)推到远程分支即可
git push origin -f 本地分支名:远程分支名
(1)右键找到rebase按钮,注意分支名,左侧是本地分支,右侧是远程主干分支,同时勾选force勾选
框
(2)然后通过commit-id值找到对应的需要合并的记录,然后进行合并处理,一般是将后面提交的合并
到前面提交的记录上去。
(3)处理完后点击start rebase按钮,中间会出现修改message的界面,修改完后,点击commit按
钮,完成合并操作,然后将修改推送远程仓库【使用git push强制推送,勾选force勾选框】
命令行操作:
方式一:
git status
git restore 误修改的文件
方式二:
git status
git reset --hard 【高危操作】
命令行操作:
git status
git restore --staged 文件名
(1)手动将不应该修改的代码还原回去,重新三部曲
(2)git reset --hard + commit-id
(3)如果误提交的代码比较多,不容易改回去,则复制远程master的对应代码还原本地的代码,重新三部曲
(1)分别创建两个分支:
git branch 分支1
git branch 分支2
(2)分别切换到两个分支上进行开发即可,开发完成后三部曲push到远程分支
git push origin 分支1:分支1
git push origin 分支2:分支2
(3)然后在分别创建两个pull request即可
# 注意:创建分支时,实际是基于当前的分支创建的,如果功能一已经提交到了本地库,那么创建分支时,应
该先切换到master分支,然后基于master分支创建新的分支2,然后再pull代码,进行功能二的开发
(1)git pull 拉master的代码 (则会看到冲突)
(2)处理冲突
(3)git commit时记得标记为已解决冲突
【提交代码的时候,只动冲突的文件,别人的文件不要乱动】
(4)然后git push即可,冲突处理完成
(1)git pull origin master
(2)git diff 查看冲突的文件
(3)处理冲突 vim 冲突的文件 (注意!!!)
(4)git add . (或者指定需要修改的文件)
(5)git commit -m "消息体"
(6)git push origin 本地分支:远程分支名
(1)git diff 查看冲突的文件
(2)处理冲突 vim 冲突的文件 (注意!!!)
(3)git add .
(4)git commit -m "消息体"
(5)git push origin 本地分支:远程分支名
(1)git diff 查看冲突的文件
(2)处理冲突 vim 冲突的文件 (注意!!!)
(3)git add .
(4)git commit -m "消息体"
(5)git rebase --continue
(6)git push origin 本地分支:远程分支名
# 注意:如果git rebase出现冲突后,想终止rebase,则可以使用git rebase --abort
git branch 分支名
git checkout 分支名
create branch
switch/checkout
查看当前本地所有分支:
git branch
创建分支:
git branch 分支名
删除分支:
git branch -d 分支名
# 强制删除 git branch -D 分支名 (或者加-f)
切换分支:
git checkout 分支名
创建分支&&切换分支:
git checkout -b 分支名
查看所有分支(本地和远程):
git branch -a
# 临时保存当前的修改
git stash
# 还原之前临时保存的修改
git stash pop
git reset --hard commit-id值( commit-id值可以从git log中查看到)
# git reset 命令会回滚本地分支的代码到这个commit-id节点。所以执行该命令时,一定要提前备份自己
本地的修改
git branch --set-upstream-to=origin/远程分支名 本地分支名
# 如:git branch --set-upstream-to=origin/master lxd
git blame 文件 (指定行号查看 git blame -L 3,10 文件 )
git show commit-id值
git merge [branch]
如何将一个需求快速合并到其他分支
git cherry-pick [commit-id]
查看历史提交日志
git log
git常用命令汇总:
===================================================
Git版本管理:
主要是管理代码的版本为主
版本管理分为2种:
1、分布式管理:Git
2、集中式管理:SVN
----------------------------
Git命令:
1、版本克隆
git clone ssh库地址 //将远程服务器的版本拷贝到本地目录
如:
git clone ssh://admin@115.28.86.8:29418/~admin/test_324_2_0618.git
[克隆完了之后,切换到版本目录里面去,进入主线版本:主分支]
2、推版本:三部曲
2.1:添加文件
git add 文件名 // 添加单个文件,将文件放到缓存
git add . // 批量添加当前目录下所有修改的文件
2.2:提交文件到本地库
git commit -m "文字描述[本次操作的意图]"
// 将缓存的内容提交到本地库,产生最新版
2.3:推版本到远程库
git push //简化版本(直接push到远程master分支了)
git push orgin 本地名:远程名
3、修改用户信息:全局修改[针对所有版本]
git config --global user.name "用户名"
git config --global user.email "邮箱@qq.com"
4、拉版本:
git pull //将远程库最新版修改的文件拉到本地并合并到本地库
5、合并:
git merge
6、解决冲突:
git rebase
查看比较git diff ,找到冲突的文件,再vim修改,再提交
冲突:<1.版本冲突: git pull->再push
<2.文件冲突; git diff->找位置修改->再提交3部曲
7、查看提交历史,获取版本id/版本号
git log
8、版本回退
git reset --hard 版本号 // 通过git log 拿到指定版本号
9、命令区别:
git pull //拉最新修改的文件到本地并合并
git fetch //抓取最新修改的文件到本地,不合并[需用 git merge合并]
git clone //整个库都拷贝下载到本地,产生本地库
10:分支操作
10.1 查看分支
git branch // 查看当前分支及本地分支
git branch -a // 查看所有分支
10.2 创建分支
git branch 分支名字 // 指定名字创建分支
git branch -d 分支名字 //删除分支(不常用)
git branch -D 分支名字 //强制删除分支
10.3 切换分支
git checkout <branch_name> //切换到指定分支
git checkout -b <branch_name> //创建并切换到指定分支
10.4 合并分支
git merge 分支名
10.5 部分合并
git cherry-pick <commitHash>某个版本id //命令的作用,就是将指定的提交(commit)应用于其他分支。
// 上面命令就会将指定的提交commitHash,应用于当前分支
【参考 https://blog.csdn.net/qq35432904/article/details/107232691】
----------------------------------------------------------
补充命令:
11、stash
git stash 隐藏当前工作的修改
如果不隐藏自己修改的半成品代码,就会发生切换到别的分支后,将然后自己的半成品代码带入其他分支,这样就发生很多不必要的麻烦。
git stash save message
执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
git stash list 查看隐藏的工作信息列表
git stash drop 删除隐藏的工作信息
git stash pop 恢复隐藏的工作信息,同时删除隐藏的工作信息
git stash apply [stash@{0}] 恢复指定的隐藏工作信息,但是不会删除隐藏的工作信息
12.diff
git diff HEAD -- . 查看最新本地版本库和工作区所有文件的区别
git diff HEAD -- [file-name] 查看最新本地版本库和工作区文件的却别
git diff HEAD^ -- [file-name] 查看本地上一个版本和工作区文件的却别
git diff [local branch] origin/[remote branch] 比较本地分支和远程分支的区别
13、# 生成一个可供发布的压缩包
git archive
#查看支持的归档格式有tar、tgz、tar.gz、zip
git archive --list
#导出最新的版本库
git archive -o ../latest.zip HEAD
#导出一个目录
git archive -o ../git-1.4.0-docs.zip HEAD:Documentation/
#导出指定提交记录
git archive -o ../git-1.4.0.tar 8996b47
#导出为tar.gz格式
git archive 8996b47 | gzip > ../git-1.4.0.tar.gz
gitstatus //查看当前状态
导出最后一次提交修改过的文件
git archive -o ../updated.zip HEAD $(git diff --name-only HEAD^)