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教程

上一篇 下一篇

猜你喜欢

热点阅读