git经常使用命令小计

  • git init初始化一个本地git仓库repository
  • git status查看状态
  • git add <file>将工做区修改加到暂存区(stage)
  • git commit -m "<some message>"将暂存区(stage)提交到仓库(repository)并写一些备忘信息
  • git reset --hard HEAD^或者git reset --hard HEAD~1将工做区退回到仓库(repository)中上一个版本
  • git checkout -- <file>将工做区中file文件的修改撤销,包括把删除的file复原(在添加到stage以前才有效,若是将工做区文件的修改add到了stage,那么再使用这个命令就会无效,这时应该先把stage的unstage撤销掉再使用上面的命令)
  • git reset HEAD <file>将添加至stage的file文件unstage掉
  • git rm <file>把file从repository中删除,以后再用commit就行
  • git remote add origin git@server-name:path/repo-name.git关联一个远程库
  • git push -u origin master第一次将本地的repository的master分支推送到远程,之后再push就不用加-u了
  • git clone git@server-name:path/repo-name.git从远程仓库clone一个仓库到本地,同时会关联到远程仓库
  • git clone -b <branchName> git@server-name:path/repo-name.git从远程clone指定分支到本地
  • git branch <name>建立一个名为name的分支
  • git checkout <name>切换到name分支上
  • git chekout -b <name>上面两条命令合并以后的简写,即建立一个名为name的分支并切换到那个分支
  • git branch查看本地全部分支,当前所在分支前面有一个*号
  • git branch -r查看远程全部分支
  • git branch -a查看本地和远程全部分支
  • git branch -d <name>删除名为name的分支
  • git branch -D <name>强行删除名为name的分支,用d删除的话,如过name分支没有被合并就没法删除,那么就要用D
  • git merge <name>将指定name的分支合并到当前分支,其实就是把当前分支的内容更新为指定name分支的内容(前提是name分支的修改是上次commit以后最新的修改,或者说在上次commit以后name分支commit的次数比当前分支commit的次数多),若是name分支和当前分支的修改都是在上次commit以后最新的修改且内容不同(或者说这两个分支自上次commit以后各自commit的次数是同样的),那么 就会产生冲突,须要解决冲突才能在当前分支上完成合并。解决冲突的方法就行修改当前分支内容,肯定你想要当前分支的内容,而后再在当前分支上add和commit一次就能够了,这时,当前分支会比name分支多一次提交,也就是当前分支的修改比name分支的修改要新(若是此时你切换到name分支上,再merge当前分支,那么就会直接合并了,由于当前分支比name分支要新)
  • git merge <name>时,若是name分支没有当前分支新,那么就会提示Already up to date,就是说当前分支比起name分支是新的。
  • git log查看提交的日志信息
  • git log --pretty=oneline查看只有一行的简略日志信息
  • git log --graph查看日志信息的图示信息
  • git log --grapg --pretty=oneline --abbrev-commit
  • git merge --no-ff表示在系统采起fast-forward时让系统采用普通合并方式,而不是采用快速合并,普通合并会多一次commit,这样在之后查看时可以看到合并历史,而fast-forward合并则看不到曾经作过的合并
  • 分支管理策略:通常来讲都是一个master分支,这个分支只用来发布新版本,不在上面干活,应该新建一个dev分支,平时都在dev上面干活,每一个人一个分支,以后合并到dev上面就行,要发布时就把dev合并到master分支上便可。
  • git stash把当前工做现场先存起来(不是add也不是commit),能够暂时去作其余事,以后(主要应用场景是当前手头工做没作完不能commit,可是又有紧急的bug须要切换到其余分支上去修复)
  • git stash list查看全部存起来的工做现场
  • git stash apply <指定stash>或者git stash pop <指定stash>,二者区别就是前者恢复工做现场后stash list当中并不删除指定stash,然后者就是直接将stash list中的pop出去删除了。
  • git remote查看远程库信息,远程库默认名字是origin,git remote -v查看更详细的信息
  • git push origin <brancName>将分支推送到远程的branch分支上
  • 若是在git clone时不指定branch名称,那么clone下来的只会包含远程的master分支,在这以后若是要切换到远程的某一分支上,例如dev分支,那么就须要git checkout -b dev origin/dev,用这个命令建立本地的dev分支,而后就能够在这个dev上修改,并在以后随时push
  • 若是多我的同时关联了远程库(多人协做时),在push的时候,发现有人已经向remote推送了他的提交,而你对一样的文件作了修改,那么在push的时候就会报错rejected推送失败,由于有冲突,因此这时候应该git pull拉取最新的提交并(自动地)在本地合并,产生冲突,而后本地解决冲突以后再add、commit,再push。
  • git pull从远程拉取最新的修改到本地并合并,若是有冲突则须要在本地解决。git pull至关于git fetch加上merge
  • 接着上面的说,若是本地解决冲突再push上去以后,其余的人是不会自动的得到更新消息的,就是说别人使用git status会提示up to date with origin/,他们须要git fetch或者git pull以后才能获取到远程最新的变更
  • git fetch从远程取回全部分支的更新(但不会自动合并)
  • git fetch origin <branchName>从远程取回branchName分支的更新(但不会自动合并)。使用fetch以后就能够用git status查看到本地和远程以后的变更了。
  • git rebase 变基
  • git diff <filename>不带参数就是比较工做区和stage中filename文件的不一样
  • git diff --cached <filename>比较stage和repository中filename文件的不一样
  • git diff HEAD <filename>比较工做区和repository中filename文件的不一样
  • 标签
  • git add .只添加当前目录下的更改
  • git add -A添加repository中全部目录下的修改
  • 在本地新建一个分支再push到远端:git checkout -b newbranchgit push origin newbranch
  • git cherry-pick <commitid>git cherry-pick <commitid1>..<commitid2>这里的<commitid>通常来讲不是当前分支上的,而是另外一个分支上的<commitid>,用于将另外一个分支上的提交commit(或者说复制到、摘抄到)到当前分支,详见:git 场景——从一个分支cherry-pick一个或多个commit到另外一个分支
相关文章
相关标签/搜索