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 pushgit 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扩展

image-20211219205930312
  • pick:保留该commit(缩写:p)
  • reword:保留该commit,但我需要修改该commit的注释(缩写:r)
  • edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)
  • squash:将该commit和前一个commit合并(缩写:s)
  • fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)
  • exec:执行shell命令(缩写:x)
  • drop:我要丢弃该commit(缩写:d)