前言

学习git的时候,我们首先学习的是最常用的,自己独立开发Software时用的命令:

git init                                                                 #初始化git仓库
git add <file_name>                                              #将文件添加到暂存区
git rm <file_name>                                              #将暂存区的该文件删除
git commit -m "<commit info>"                             #将暂存区的修改提交到当前分支
git status                                                             #查看当前状态
git reset --hard <commit_id>                                #切换到commit_id对应的版本
git checkout -- <file_name>                                  #撤销file_name文件的工作区修改
git reset HEAD <file_name>                                  #撤销暂存区的修改,将其放回工作区
git diff HEAD -- <file_name>                                 #查看工作区和版本库里面file_name对应文件最新版本的区别
git checkout <branch_name>                                 #切换到该branch
git checkout -b <branch_name>                             #创建名为<branch_name>的branch并切换到该branch
git clone <remote_git_address>                              #克隆远端仓库到本地

而在实际工作中,我们往往要与他人一起合作开发/Debug。这个时候,就得学习在合作开发/Debug的情况下遇到的各种情况该怎么办,什么样的Git命令能解决我们的问题。

场景1: 需要拉取陌生远端分支到本地。我们本地有一个自己的repo, 此时同事遇到一个比较难的Bug想请你帮忙一起看看,但是这个Bug在你自己的repo的branch上没有,于是同事将其branch推送到了他自己的Github远端仓库里,然后把远端仓库的git address和branch name发给你了。此时我们该怎么办呢?

我们应该:

1. 添加一个远端源 git remote add <created_remote_name> <github_repo_git_address>
2. 将远端源的信息拉过来 git fetch <created_remote_name>
3. 拉取远端源repo的一个分支到本地分支 git checkout -b <local_branch_name> <created_remote_name>/<branch_name>

场景2: 本地与远端同一分支提交历史不一致。本地与远端同一分支提交历史不一致。多个人在同一个分支上协作时,出现冲突是很正常的,比如现在有一个项目由我和A一同开发。我在修复了一个bug以后准备提交,现在准备推送到远端。push失败了,发现A在我之前已经提交了,我本地master分支的提交历史已经落后远端了,需要先pull一下,与远端同步后才能push。

直接执行 git pull --rebase

场景3:其他场景

将目标分支的代码Merge到本地分支 git merge <object_branch>
 (if has conflicts and want to just cover the current code with object branch code, add "--strategy-option theirs" parameter)
将本地分支代码推送到远端源指定分支 git push <local_branch_name> <created_remote_name>:<branch_name>
 (if want to cover the remote code with local code, add "-f" parameter)
01-13 22:50