git操作手册

两张重要的图:

 

 

工作区(unstage),add到暂存区(stage),commit到本地仓库(.git)

一、下载版本

正常克隆,本地库名称和远程库名称默认相同

git clone git库地址

正常克隆,本地库名称和原创库名称不同(不建议)

git clone git库地址 自定义名称

二、分支管理

Git鼓励使用分支。代码下载后,默认本地为master分支,建议先创建一个dev或者bug分支开始工作,这样做的好处:

1、便于多分支共同工作,可以及时修复bug;

2、确保不把master搞的乱七八糟,如果新拉分支出来改的有问题,可以快速通过新创建分支完全抛弃之前的分支;

3、多人合作的情况下,别人也在修改,如果直接在master上修改,想在提交前看看别人改了什么,并合并自己的修改就不方便了。

如果不习惯不同分支共享OS文件目录,那就用笨办法,把分支拷贝到另外的目录中修改,然后再合并回来,但是不推荐,违背了git的思想。

查看分支:git branch    //查看本地分支  -a 查看所有分支,-r查看远程分支

创建分支:git branch <name>

切换分支:git checkout <name>

git 切换到远程分支

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/Release
  remotes/origin/master

切换到 origin/Release分支,并在本地新建分支 myRelease

$git checkout -b myRelease origin/Release
Branch myRelease set up to track remote branch Release from origin.
Switched to a new bracdnch 'myRelease'

如果在当前分支的工作尚未完成(尚未提交),又要切换到另外的分支上工作,使用如下两个命令

git stash //临保存存当前工作区

git stash pop // 从之前的状态恢复过来,相当于先用git stash apply恢复,再用git stash drop来删除;

git stash list //查看是否有保存的临时工作区

创建+切换分支:git checkout -b <name>  

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

服务端删除分支以后,本地一直还能看到,可参考如下文档中git remote prune origin命令删除,删除之前可先用git remote show origin 查看哪些是无效的。

git远程删除分支后,本地git branch -a 依然能看到的解决办法_W8023Y2014的博客-CSDN博客

三、代码修改和提交

git add file //将制定文件加到暂存区,推荐使用,还是很明确的指定修改了哪些文件更合适

git add .   //将所有改动加到暂存区 , 如果直接在当前库中编译代码,不建议使用,因为会产生很多临时文件,不小心就加到库中了;

git commit -m "commit message"  //提交所有改动到当前分支

git commit -a -m "commit message"  //先add 所有改动,后提交到当前分支 -- 不建议使用,因为会产生很多临时文件,不小心就加到库中了;

git diff   //#是工作区(work dict)和暂存区(stage)的比较

git diff --cached   //#是暂存区(stage)和分支(master)的比较

git push origin master // 将本地master分支提交到远程仓库

git push origin branch-name  //提交到指定远程分支

命令行太长,可以使用别名。比如 git config --global alias.shotname "longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong command"

还原工作区乱七八糟的修改用git-clean - Remove untracked files from the working tree

git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <path>…?

git clean -d -f //强制删除所有untracked files

git clean -n  //显示将被删除的untracked files

四、版本回退(还没有提交到远程仓库之前)

场景1(没有Add):当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令:

git checkout -- file  //放弃指定文件的修改

git checkout .       //放弃所有修改

场景2(已经add,没有commit):当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

场景3(已经commit):已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。

穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。

要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

git reset --hard HEAD //当前版本

git reset --hard HEAD^ //前一版本

git reset --hard commit_id  //指定版本  commit_id使用git log 或者git reflog查看

场景4(已经push)

Git 撤销commit文件 和 回退push的文件 - 简书

git reset --hard commit_id  //回退到指定版本

git push --force 会把之前的commit记录都清除,只有owner有这个权限

五、推荐最佳实践

1、clone代码到本地

2、创建开发分支,进行代码修改

创建+切换分支:git checkout -b <name>

3、返回主分支,从远程仓库pull最新代码,合并修改的代码

git pull

git merge  --no-ff -m"merge with no-ff" <name>  

准备合并dev分支,请注意--no-ff参数,表示禁用Fast forward

$git merge --no-ff -m"merge with no-ff" devMerge made by the'recursive' strategy.

 readme.txt |1 +

 1 file changed,1 insertion(+)

$ git log--graph --pretty=oneline --abbrev-commit

  1. 提交到远程库 git push

5、删除临时分支:git branch -d <name>   //可选

git fetch

$ git status

On branch master

Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded.

  (use "git pull" to update your local branch)

nothing to commit, working tree clean

pull=fetch+merge,pull的话,下拉远程分支并与本地分支合并。fetch只是下拉远程分支,怎么合并,可以自己再做选择。

如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name

六、创建空白xxx分支并提交为远程xxx分支(不用事先在远程库拉分支):

git checkout --orphan xxx

git rm -rf .

拷贝新代码到当前目录以后,执行如下命令

Git add .

Git commit -m “commit xxx code”

git push origin xxx:xxx

切换到master分支Git pull以后,再切换回来状态就正常了

git push origin TENANTV6.01.01:TENANTV6.01.01

git push origin V5.01.07U1:V5.01.07U1

  • 分支管理最佳实践

http://blog.jobbole.com/109466/

分支管理策略 - 廖雪峰的官方网站

从上图可以看到主要包含下面几个分支:

  • master: 主分支,主要用来版本发布。
  • develop:日常开发分支,该分支正常保存了开发的最新代码。
  • feature:具体的功能开发分支,只与 develop 分支交互。
  • release:release 分支可以认为是 master 分支的未测试版。比如说某一期的功能全部开发完成,那么就将 develop 分支合并到 release 分支,测试没有问题并且到了发布日期就合并到 master 分支,进行发布。
  • hotfix:线上 bug 修复分支。

除此之后还可以有 fast-track 等分支。

  • tag管理

git 根据tag创建分支_山楂树之恋的博客-CSDN博客

Git tag 给当前分支打标签 - x3d - 博客园


版权声明:本文为weixin_44151134原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。