Git常用操作和命令
本篇结构:工作流+单独命令
以使用频率排序
一.工作流
1.pull代码,开新分支,开发完成,push代码
添加远程URL
git remote add origin url
(git clone url
一样的效果 克隆远端仓库代码)
拉取最新的dev代码
git pull origin dev
开启并切换到feature分支
git checkout -b feature
在feature 分支完成开发后
将修改的代码添加到暂存区
git add .
查看修改 刚刚修改的文件是否被追踪到
git status
将暂存区的代码提交到本地仓库 写入信息
git commit -m "this is a commit message"
将本地仓库的代码push到远程
git push origin feature
最后可以在远程管理页面中加入pull request
2.commit的合并
https://www.jianshu.com/p/29bbZZ983ec48a
//查看提交日志
git log
//比如我们需要合并前3个commit
git rebase -i HEAD~3
(进入vi模式 输入i进入编辑模式 esc退出编辑模式 输入wq保存退出 或者q!不保存退出 或者ZZ保存退出)
在不需要的commit之前 把pick改为
squash
或者s
然后
Esc+ZZ
保存退出git会自动合并并且弹出合并信息
此时我们可以选择是否要保留message 不保留的话则在message之前加#号 注释起信息
image.png
完成注释后:
Esc+ZZ
合并完commit后
强制push
git push -u origin frature -f
3.衍合分支 rebase
比如我要将YIT-3872分支合dev进行衍合
(YIT-3872是从dev开出来的 但是后来 dev的代码又发生了改变 所有此时如果直接push YIT-3872时 需要将最新的dev代码衍合进来 否则会失败)
第一步:
在衍合之前要将YIT-3872的代码 commit 并且 push 到远端库 我里commit给是message是 “qqq”
因为rebase 是一个相对来说比较危险的操作 很容易出错 所以在push代码作为一个备份
当前分支YIT-3872
git rebase dev
执行过程中可能会有代码冲突 依据YIT-3872的commit一个个对比
比如我这里:
BackupPhotoPresent.kt这个文件中出现了代码冲突 需要我手动取解决
打开IDE android studio 找到这个文件 看冲突的地方:
image.png
这里我们可以看到最新的dev代码HEAD和我们本地commit的代码有冲突
我们依据实际情况选择保留哪个
dev代码是等号上方
qqq本地代码是等号下方
也可能是所有都要保留
解决完成所有冲突后
git add .
将刚刚的修改加入缓冲区
git status
查看修改的文件是否被追踪到
然后
git rebase --continue
继续YIT-3872的下一个commit和 dev HEAD进行对比
如果没有冲突 则会返回以下结果
Applying: qqq
此时表示衍合完成
衍合完成最后一步:
强制push
git push origin YIT-3872:YIT-3872 -f
4.暂时隐藏修改
git stash
将原本的分支修改保存隐藏起来
然后切换分支修改其他小bug
要回来继续最开始的分支时:
git stash list
查看所有存储的修改
git stash apply stash@{0}
恢复显示list中的第一个修改
git stash drop stash@{0}
删除list中的存储的第一个数据
5.添加忽略文件
1.将.idea目录加入ignore清单:
git rm -r --cached .idea
3.将.gitignore文件加入git:
git commit -m '忽略.idea'
5.Push到Git服务器:
$ git push
6.将本地项目上传到github库
cd "E:\Study\Project\TomatoStudy"
进入项目文件地址
git init
初始化git
git add .
添加缓冲区
git status
查看文件追踪情况
git commit -m"my first commit finish TomatoStudy"
将文件添加到本地仓库
添加远程仓库地址
git remote add origin https://github.com/yuqiaodan/TomatoStudy.git
保存到远程仓库
git push -u origin master
二.单独命令
git reset --hard
放弃本地修改
git branch
查看所有分支
git branch -d dev
删除指定分支dev
git clone -b dev URL
clone指定分支
git checkout -b dev origin/dev
不是从原分支切出dev,而是从远程仓库拉下dev分支并切换
git commit --amend
修改commit信息 修改完成后强制push
git push -u origin dev -f
强制push
大写I
进入编辑模式
编辑模式按ESC+大写的两下Z
就可以保存并退出
三.不常用命令 作记录
基本命令 https://www.cnblogs.com/ldj3/p/9172804.html
分支详解 https://www.cnblogs.com/matengfei123/p/8252128.html
创建版本库:
git init (初始化本地版本库)
git clone <url> e/myproject (克隆远程版本库 到指定位置)
将文件从工作区添加到暂存区:
git add 目录 /file.name: 添加整个目录下的文件或添加一个文件
将暂存区的文件commit到本地仓库:
git commit -m"First commit": 将暂存区的文件commit到本地仓库。
(-m “message” 信息参数用于说明)
配置远程origin的一些命令:
git remote add origin url (添加远程origin)
git remote -v:查看当前的origin是什么
git remote rm origin:删除远程origin
将本地仓库的代码push到远程仓库(慎重慎重):
git push -u origin master(第一次push的时候要- u)
git push origin master
获取代码:
git pull origin master (获取代码并快速整合)
git fetch origin (从远端库获取代码)
合并与衍合:
git merge <branch> # 合并指定分支到当前分支
git merge --abort # 取消当前合并,重建合并前状态
git merge dev -Xtheirs # 以合并dev分支到当前分支,有冲突则以dev分支为准给i他
git rebase <branch> # 衍合指定分支到当前分支
git branch -d dev 删除指定分支
git branch 查看所有分支
commit和push的区别:
commit操作的是本地库
push操作远程库
git clone顾名思义就是将其他仓库克隆到本地
git pull是拉取远程分支更新到本地仓库的操作
git pull = git fetch + git merge
四.Git小知识
4.1 开发过程中master发生重要修改时该怎么办
遇到的问题:我在我的分支dev上进行开发,但开发过程中,master分支产生了非常非常重要的修改,需要将修改内容合并到我的dev分支,再继续开发。
解决办法:首先明确一点,我们不能操作master,但是可以在master现有的基础上开启一个新的分支future,然后将future分支合并到dev,这时可能会有冲突需要解决,解决完成后,可以删除掉future分支,直接继续在dev进行开发就行。