feature分⽀main分支下新增func1和func2文件func1,开发者B新增func2$ vim func1
$ cat func1
fun1 from A
$ git add .
$ git commit -m "A push func1"
[feature-1 84e77e0] A push func1
1 file changed, 1 insertion(+)
create mode 100644 func1
$ git push origin feature-1
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 20 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 318 bytes | 159.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:DieSnowK/Git-Learn.git
10cd204..84e77e0 feature-1 -> feature-1
$ cat func2
fun2 fron B
$ git add .
$ git commit -m "B push func2"
[feature-2 31c8cbb] B push func2
1 file changed, 1 insertion(+)
create mode 100644 func2
$ git push origin feature-2
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 20 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 343 bytes | 343.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:DieSnowK/Git-Learn.git
10cd204..31c8cbb feature-2 -> feature-2
PS C:\Users\w1752\Desktop\My_Repository\Git-Learn>
$ git branch
* feature-1
main
$ git pull
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 323 bytes | 323.00 KiB/s, done.
From github.com:DieSnowK/Git-Learn
* [new branch] feature-2 -> origin/feature-2
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
git pull
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/ feature-1
feature-2分支,并且和远端的feature-2分支关联起来$ git checkout -b feature-2 origin/feature-2
Branch 'feature-2' set up to track remote branch 'feature-2' from 'origin'.
Switched to a new branch 'feature-2'
$ cat func2
fun2 from B
$ vim func2 # Coding...
$ cat func2
fun2 fron B
fun2 Done from A
$ git add .
$ git commit -m "A edit func2 Done"
[feature-2 2e279ac] A edit func2 Done
1 file changed, 2 insertions(+), 1 deletion(-)
$ git push origin feature-2
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 20 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 280 bytes | 280.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:DieSnowK/Git-Learn.git
31c8cbb..2e279ac feature-2 -> feature-2
main中才算真正的开发完毕,流程如下
开发者A:
切换至main,git pull,保证本地main是最新内容
切换至feature-1分支,合并main分支,有冲突就在feature-1分支解决
切换至main分支,合并feature-1分支
将main分支推送至远端

$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
$ git pull
Already up to date.
$ git checkout feature-1
Switched to branch 'feature-1'
$ git merge main
Already up to date.
$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
$ git merge feature-1
Updating 10cd204..84e77e0
Fast-forward
func1 | 1 +
1 file changed, 1 insertion(+)
create mode 100644 func1
$ cat func1
fun1 from A
$ git push
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:DieSnowK/Git-Learn.git
10cd204..84e77e0 main -> main
开发者B:
切换至main,git pull,保证本地main是最新内容
切换至feature-2分支,合并main分支,有冲突就在feature-2分支解决
由于feature-1分支已经merge进来了新内容,为了保证feature-2远程分支最新,最好在此时git push一下
git push的另一个原因是在实际的开发中,main的merge操作⼀般不是由我们⾃⼰在本地进进行,而是由审查人员进行merge时,操作的肯定是远程分⽀,所以就要保证远程分⽀的最新merge发生冲突,解决完冲突后需要commit之后才能push切换至main分支,合并feature-2分支
将main分支推送至远端

$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
$ git pull
Already up to date.
$ git checkout feature-2
Switched to branch 'feature-2'
Your branch is up to date with 'origin/feature-2'.
$ git merge main
Merge made by the 'ort' strategy.
func1 | 1 +
1 file changed, 1 insertion(+)
create mode 100644 func1
$ ls
SnowK.txt func1 func2
$ git status
On branch feature-2
Your branch is ahead of 'origin/feature-2' by 2 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
$ git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 20 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 292 bytes | 292.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:DieSnowK/Git-Learn.git
2e279ac..2250eeb feature-2 -> feature-2
$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
$ git merge feature-2
Updating 84e77e0..2250eeb
Fast-forward
func2 | 2 ++
1 file changed, 2 insertions(+)
create mode 100644 func2
$ ls
SnowK.txt func1 func2
$ git push
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:DieSnowK/Git-Learn.git
84e77e0..2250eeb main -> main
feature-1和feature-2分支都没用了,可以直接删掉了git branch -a依然能看到git branch -a发现很多在远程仓库已经删除的分⽀在本地依然可以看到git remote show origin$ git remote show origin
* remote origin
Fetch URL: git@github.com:DieSnowK/Git-Learn.git
Push URL: git@github.com:DieSnowK/Git-Learn.git
HEAD branch: main
Remote branches:
main tracked
refs/remotes/origin/dev stale (use 'git remote prune' to remove)
refs/remotes/origin/test stale (use 'git remote prune' to remove)
Local branch configured for 'git pull':
main merges with remote main
Local ref configured for 'git push':
main pushes to main (up to date)
git remote prune origin命令$ git remote prune origin
Pruning origin
URL: git@github.com:DieSnowK/Git-Learn.git
* [pruned] origin/dev
* [pruned] origin/test