Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

git 命令总结 #56

Open
wl05 opened this issue Sep 18, 2019 · 0 comments
Open

git 命令总结 #56

wl05 opened this issue Sep 18, 2019 · 0 comments

Comments

@wl05
Copy link
Owner

wl05 commented Sep 18, 2019

分管管理

创建与合并分支

  • 查看分支:git branch
  • 切换分支:git checkout 或者git switch
  • 创建+切换分支:git checkout -b 或者git switch -c
  • 合并某分支到当前分支:git merge
  • 删除分支:git branch -d

解决冲突

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

用git log --graph命令可以看到分支合并图。

分支管理策略

  • 禁用Fast forward合并:git merge --no-ff -m "merge with no-ff" dev
  • git log --graph

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

Bug分支

设A为游戏软件

  1. master 上面发布的是A的1.0版本
  2. dev 上开发的是A的2.0版本
  3. 这时,用户反映 1.0版本存在漏洞,有人利用这个漏洞开外挂
  4. 需要从dev切换到master去填这个漏洞,正常必须先提交dev目前的工作,才能切换。
  5. 而dev的工作还未完成,不想提交(commit),所以先把dev的工作stash一下。然后切换到master
  6. 在master建立分支issue101并切换.
  7. 在issue101上修复漏洞。
  8. 修复后,在master上合并issue101
  9. 切回dev,恢复原本工作,继续工作。
  • 暂存dev分支修改不用commit: git stash
  • git checkout master
  • 创建问题分支: git checkout -b issue-101
  • git checkout master
  • 合并问题分支到master分支: git merge --no-ff -m "merged bug fix 101" issue-101
  • 切回dev分支: git checkout dev
  • 查看:git stash list
  • 回到暂存前: git stash pop

Feature分支

  • git checkout -b feature-vulcan
  • git branch -d feature-vulcan 如果没有合并feature-vulcan分支会报错

开发一个新feature,最好新建一个分支;

如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。

多人协作

  • git remote -v 查看远程仓库信息,远程仓库默认名称origin
  • git push origin dev 将dev分支推送到远程仓库

但是,并不是一定要把本地分支往远程推送,那么,哪些分支需要推送,哪些不需要呢?

  • master分支是主分支,因此要时刻与远程同步;

  • dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

  • bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;

  • feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

总之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,视你的心情而定!

  • 查看远程库信息,使用git remote -v;

  • 本地新建的分支如果不推送到远程,对其他人就是不可见的;

  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;

  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;

  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;

  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

Rebase

  • rebase操作可以把本地未push的分叉提交历史整理成直线;

  • rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

标签管理

创建标签

  • 命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id;
git tag v0.9 f52c633
git show v0.9
git tag -a v0.1 -m "version 0.1 released" 1094adb
  • 命令git tag -a -m "blablabla..."可以指定标签信息;

  • 命令git tag可以查看所有标签。

操作标签

  • 命令git push origin 可以推送一个本地标签;

  • 命令git push origin --tags可以推送全部未推送过的本地标签;

  • 命令git tag -d 可以删除一个本地标签;

  • 命令git push origin :refs/tags/可以删除一个远程标签。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant