Git —— 基础

2 阅读4分钟

Git —— 基础

1、reset 回滚

reset 回滚后,需要 git push --force

2、刚刚从别的分支merge的内容不想要了怎么办

(1)先 reset 到 merge 的前一个版本号;

(2)强推到仓库指定分支。

注意:最好不要使用revert,revert默认拒绝撤销 merge 操作。

git reset --hard head^
git push origin -f branch1

3、不要试图使用 revert 撤销 merge 操作

revert只对本分支的提交使用,例如我有一个更改a文件的提交xxx,现在我想复原a文件,就可以对这个提交xxx使用revert。

git revert xxx

4、怎么拉取远程公共仓库的新建分支

git pull public_repository

5、新建分支写新功能步骤

注意:新需求一定要基于本地master拉新分支。

=> 切换至本地master

=> 拉取远程master

=> 基于master新建分支feature/xxx

=> 开发新功能

=> 新功能开发完毕

=> 在本地feature/xxx分支拉取远程master

=> 推送远程feature/xxx

=> 远程feature/xxx合入公共仓feature/xxx

=> 公共仓feature/xxx合入master

=======================================

以下是rebase

切换至本地master => 拉取远程master

切换至feature/xxx => git rebase master

切换至本地master => git merge feature/xxx

6、rebase不适合fork仓库的开发模式,除非你在新功能开发过程中不push到fork 仓库

这是因为:

(1)假设新功能分支为feature/xxx;

(2)若在开发过程中push了两个提交commit1、commit2到fork仓库的feature/xxx分支;

(3)后续又继续开发了commit3、commit4;

(4)那么在开发结束后,在 feature/xxx 上的 rebase master 操作会使得commit1、commit2丢失;

(5)这样,再次push到fork仓库的 feature/xxx 就push不上去了,这是因为远程fork仓库feature/xxx分支上存在的某些提交,在本地的feature/xxx分支并没有。

注意:在fork开发模式下,其实只要在开发完成前不发布分支到fork仓,也是可行的,因为这样就不会出现不能提交的情况。

那何种情况适合 rebase 的合并方式?

答:适合非fork仓的开发模式。原因如下:

(1)只有一个中心仓的情况下,需要开发新功能时;

(2)在本地基于master新建分支feature/xxx;

(3)过程中可以随便push commit到本地开发仓库的feature/xxx分支;

(4)等到功能开发完毕,执行 git rebase master;

(5)最后,直接将本地feature/xxx合并到中心仓的master即可。

7、基于dev分支的开发模式

基于dev分支的开发模式,在开发新功能时:

(1)先基于dev新建分支 feature/xxx;

(2)当功能开发完毕后,切换到dev拉取远端dev的最新内容;

(3)然后 merge feature/xxx,并解决冲突;

(4)最后将本地dev合并到远端dev即可。

8、当前工作没做完,需要临时切换到别的分支做一些事情

对于已经 add 过的文件,只需执行下述命令

git stash

对于从未 add 过的文件,需要加上 -u (既包含add过的文件,又包含从未add过的文件时,也是直接 git stash -u)

git stash -u

然后切换到其它分支做完临时事情后,再切回来,执行下述命令即可恢复stash的内容

git stash pop

9、只想将branch2的部分提交合并到branch1

git cherry-pick

(1)只合并单个提交

git cherry-pick 某个提交的hash

(2)当 cherry-pick 的对象写成分支名时,代表这个分支的最新一次提交

git cherry-pick branch2

(3)支持 pick 多个

git cherry-pick hash1 hash2

(4)写成下面的形式代表左开右闭 (hash1, hash2]

git cherry-pick hash1..hash2

(5)这样代表 [hash1, hash2]

git cherry-pick hash1^..hash2

10、解决冲突

(1)解决完冲突要做的第一件事是把冲突文件再次添加进暂存区

git add 冲突文件

(2)然后执行continue命令,继续merge过程

git merge/rebase/cherry-pick --continue

(3)如果中间搞乱了,可以使用abort中止该merge,回到merge之前的状态

git merge/rebase/cherry-pick --abort