Git操作流程:(三)分支
2021-02-05 本文已影响0人
wsgdiv
1、创建与合并分支
$ git checkout -b dev //创建分支,git checkout命令加上-b参数表示创建并切换,相当于两条命令:$ git branch dev $ git checkout dev Switched to branch 'dev'
Switched to a new branch 'dev'
$ git branch //git branch命令查看当前分支
* dev
master
$ git checkout master //切换回master分支,最新版本的Git提供了新的git switch命令来切换分支
//创建并切换到新的dev分支,可以使用:$ git switch -c dev
//直接切换到已有的master分支,可以使用:$ git switch master
Switched to branch 'master'
$ git merge dev //git merge命令用于合并指定分支到当前分支。把dev分支的工作成果合并到master分支上
Updating d46f35e..b17d20e
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
$ git branch -d dev //删除dev分支
Deleted branch dev (was b17d20e).
2、冲突
$ git status //git status可以告诉我们冲突的文件
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
(use "git push" to publish your local commits)
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
$ git log --graph --pretty=oneline --abbrev-commit //git log --graph命令可以看到分支合并图。
* cf810e4 (HEAD -> master) conflict fixed
|\
| * 14096d0 (feature1) AND simple
* | 5dc6824 & simple
|/
* b17d20e branch test
* d46f35e (origin/master) remove test.txt
* b84166e add test.txt
* 519219b git tracks changes
* e43a48b understand how stage works
* 1094adb append GPL
* e475afc add distributed
* eaadf4e wrote a readme file
$ git merge --no-ff -m "merge with no-ff" dev //准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward,本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
Merge made by the 'recursive' strategy.
readme.txt | 1 +
1 file changed, 1 insertion(+)
3、bug分支
$ git stash stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
Saved working directory and index state WIP on dev: f52c633 add merge
$ git checkout master //假定需要在master分支上修复bug
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
(use "git push" to publish your local commits)
$ git checkout -b issue-101
Switched to a new branch 'issue-101'
$ git add readme.txt
$ git commit -m "fix bug 101"
[issue-101 4c805e2] fix bug 101
1 file changed, 1 insertion(+), 1 deletion(-)
$ git switch master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.
(use "git push" to publish your local commits)
$ git merge --no-ff -m "merged bug fix 101" issue-101
Merge made by the 'recursive' strategy.
readme.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
$ git switch dev //修复bug后,返回原分支
Switched to branch 'dev'
$ git status
On branch dev
nothing to commit, working tree clean
$ git stash list
stash@{0}: WIP on dev: f52c633 add merge
$ git branch //如果这个bug在dev分支上也存在
* dev
master
$ git cherry-pick 4c805e2
[master 1d4b803] fix bug 101
1 file changed, 1 insertion(+), 1 deletion(-)
注意:Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了
可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:
$ git stash apply stash@{0}
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
查看远程库信息,使用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;
4、Rebase
$ git rebase //把分叉的提交历史“整理”成一条直线,看上去更直观。缺点是本地的分叉提交已经被修改过了。
First, rewinding head to replay your work on top of it...
Applying: add comment
Using index info to reconstruct a base tree...
M hello.py
Falling back to patching base and 3-way merge...
Auto-merging hello.py
Applying: add author
Using index info to reconstruct a base tree...
M hello.py
Falling back to patching base and 3-way merge...
Auto-merging hello.py
素材来源:廖雪峰的git教程