git 分支相关常用命令
基本命令
// 查看本地分支
git branch
// 查看远程分支
git branch -r
// 查看分支详细信息
git branch -vv
// 同步远程仓库
git fetch
// 创建分支dev
git branch dev
// 切换到分支dev
git checkout dev
// 删除分支dev
git branch -d dev
// 创建并切换到分支dev
git checkout -b dev
// 合并分支
git merge dev
远程分支
创建远程分支
git push (远程仓库名) (分支名)
或
git push (远程仓库名) (本地分支名:运程分支名)
// 创建远程分支dev
git push origin dev
// 或
git push origin dev:dev
意思为取出本地的dev分支,推送到远程的仓库中的dev分支去。
跟踪远程分支
从远程分支
checkout
出来的本地分支,称为 跟踪分支 (tracking branch)。跟踪分支是一种和某个远程分支有直接联系的本地分支。在跟踪分支里输入git push
,Git 会自行推断应该向哪个服务器的哪个分支推送数据。同样,在这些分支里运行git pull
会获取所有远程索引,并把它们的数据都合并到本地分支中来。
git checkout -b [分支名] [远程名]/[分支名]
git checkout --track origin/dev
// 从远程分支dev创建本地分支feature
git checkout -b feature origin/dev
在克隆仓库时,Git 通常会自动创建一个名为
master
的分支来跟踪origin/master
。这正是git push
和git pull
一开始就能正常工作的原因。
// 将本地分支feature的远程分支设为orgin/dev
git branch --set-upstream-to=origin/dev
删除远程分支
语法:git push [远程名] :[分支名]
// 删除远程分支dev
git push origin :dev
更新
从仓库更新更新跟踪的远程分支
git pull
git pull origin
从远程分支master合并到当前分支
git pull origin master
相当于
git fetch origin
git merge origin/next
参考:Git-分支-远程分支
与Github同步
将本地的一个目录下的文件与Github上一个仓库相关联。
// 初始化本地
git init
// 增加远程仓库地址
git remote add origin git@github.com:Zhao-Hui-Huang/GitLearn.git
// 从远程仓库同步
git fetch
// 检出
git checkout --track origin/master
git add .
git commit -m'add test file'
git push
Git 比较命令
// 比较工作区与暂存区的文件
git diff
// 比较暂存区与最后一次commit的文件
git diff --cached
// 比较工作区与最后一次commit的文件
git diff HEAD
Git rebase(高端操作)
我们在工作中很常见代码冲突
场景实例 假如我们master迁出(dev1
)分支 进行工作 别人也在master(dev2
)迁出进行工作
每个人都会提交多个commit 这样分支会很不好看。
当一个人开发完毕后 他会合并分支到master上 那我们分支的代码就不是最新的了如果俩个人修改了同一份文件 这样就会使我们产生冲突 那我们如何优雅的去解决合并 并且使我们的分支变的好看呢。
请看实例
首先创建分支
// 创建分支
git branch dev
// 切换分支
git checkout dev
或者
// 创建并切换到分支dev
git checkout -b dev
现在我们有俩个分支了
切换回主分支
git checkout -b master
创建文件
touch master.txt
touch dev.txt
修改master分支文件
vim master.txt
然后i进行插入
esc
输入
:wq
保存
然后再master主分支进行素质三连
git add .
git commit "master1"
git push origin master
然后切换到我们dev分支
修改dev文件 操作同上
这时候没有冲突 可以直接合并
// 注意 是在dev分支进行此操作
git merge master
然后素质三连进行提交
切回到主分支master
进行修改 接着修改dev文件 然后素质三连
切换到dev分支 修改dev文件 然后提交
接着合并master
注意细节
// 我们应当这样进行合并
git rebase master
git merge master
// 这时我们执行
git status
// git status命令会提示你当前应该怎么做
// 然后我们根据提示执行合并并解决冲突
git rebase --continue
// 然后执行
git add <冲突的文件名>
// 继续
git rebase --continue
:wq 保存
// 然后打开我们冲突的文件
vim <冲突的文件名>
// 把多余的进行删除 然后add commit
git add .
git commit -m "dev2"
// 接着我们执行
git rebase -i HEAD~<commit几次就数字几>
// 列子
git rebase -i HEAD~2
// i 进行修改 除了第一个之外进行 pick改为f(其它命令自行百度)
:wq 进行保存
// 然后进行强制提交
git push origin dev -f
// 大功告成
这时我们的冲突解决了 而且保持了最新的代码master
而且我们的分支 commit提交也很简介 只有我们保留的那一个
多练习就可以了
git rebase扩展
- pick:保留该commit(缩写:p)
- reword:保留该commit,但我需要修改该commit的注释(缩写:r)
- edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
- squash:将该commit和前一个commit合并(缩写:s)
- fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
- exec:执行shell命令(缩写:x)
- drop:我要丢弃该commit(缩写:d)
- Post link: https://yanxiang.wang/git%E5%88%86%E6%94%AF%E7%AE%A1%E7%90%86/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.