Git笔记

来源:互联网 发布:冒险岛登陆器源码 编辑:程序博客网 时间:2024/06/06 02:11

  1. git add是提交到暂存区域
  2. git commit是提交到本地git目录 -a 跳过add到暂存域
  3. git commit –amend 修复上一次提交
  4. git push 是提交到远程目录
  5. git log查看提交历史 -p显示每次提交的内容差异 -2最近两次提交 – stat显示摘要,如次数 –pretty=format:”%h -%an, %ar %s” –graph
  6. git mv README2.md README3.md
  7. git reset HEAD pom.xml 从暂存域恢复回来
  8. git checkout – pom.xml撤销本地变更
  9. git remote -v查看当前的远程仓库
  10. git remote add pb git://github.com/dfa/gasdf.git添加远程仓库
  11. git fetch origin 命令会到远程仓库中拉取所有你本地仓库中还没有的数据.就可以在本地访问该远程仓库中的所有分支
  12. git remote show [remote-name]
  13. git remote rename originA originB :远程仓库的重命名
  14. git remote rm originB :远程仓库的删除
  15. git tag [-l ‘3.6‘] 列出tag[tag名满足通配符的tag]
  16. 发布一个版本时,我们通常先在版本库中打一个标签,这样,就唯一确定了打标签时刻的版本。标签也是版本库的一个快照。
  17. Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(分支可以移动,标签不能移动)

  18. git tag -a v3.6.7.1 -m ‘my version 3.6.7.1’ 创建附注型标签

  19. git show v3.6.7.1
  20. git config –global alias.ci commit 创建别名 git ci <=> git commit
  21. git config –global alias.visual “!gitk”调用外部命令

  22. git branch 显示本地分支,不会切换到新的分支上

  23. git branch -a 显示所有分支(包括本地和远程),不会切换到新的分支上
  24. git branch testing 会在当前(最新)commit对象上新建一个分支指针

  25. git checkout -b iss53 新建分支iss53并切换到该分支 <==> git branch iss53 ; git checkout iss53

  26. git checkout testing 切换到testing分支,HEAD指向了testing分支。Git 会把工作目录的内容恢复为检出某分支时它所指向的那个commit的快照。它会自动添加、删除和修改文件以确保目录的内容和你上次提交时完全一样。

  27. Git 中的分支实际上仅是一个包含所指对象校验和(40 个字符长度SHA-1 字串)的文件,新建一个分支就是向一个文件写入41 个字节
    git每次提交时都记录了祖先信息.

  28. bugfix操作:返回到原先已经发布到生产服务器上的分支。为这次紧急修补建立一个新分支。测试通过后,将此修补分支合并,再推送到生产服务器上。切换到之前实现新需求的分支,继续工作。

  29. 转换分支之前应保持清洁的暂存域或本地工作目录,否则容易出现切换的分支与切换前的分支冲突(用stashing和amending可绕过)

  30. git checkout master ; git merge bugfix;会把master分支指针往前移,指向bugfix分支,因为他们在同一个分叉上。如果处于不同分叉上,git不会简单的右移,而是对要合并的两个分支以及他们的公共祖先的合并结果做一次快照,并让master指向该合并后的快照
    git branch -d bugfix;//此时可以删除bugfix了,因为master已经和bugfix指向同一个提交了。

  31. git branch -D testing删除未合并的分支会失败,可以用-D强制删

  32. git branch -av 显示各个分支最后一次提交情况

  33. git branch –merged[–no-merged]查看哪些分支已经被[没被]并入当前分支。对于merged的结果,如果有不标记为*的分支,可以删掉

  34. 从服务器clone代码到本地的时候,远程服务器上得master分支是origin/master,用户无法在本地修改它的内容,会在本地创建一个与origin/master一致的master分支,用户可以修改本地master的内容。只要不和服务器通信,origin/master指针不会移动。

  35. git fetch origin 可以与服务器同步:获取本地尚未拥有的数据,更新本地的数据库,移动origin/master到最新位置。

  36. git remote add teamone git@…. 添加项目的远程分支。会创建一个teamone/master分支。teamone与origin角色类似。

  37. git push origin bugfix:bugfix2 提取我的bugfix分支并更新到远程仓库的bugfix2分支

  38. git merge origin/master 合并本地的origin/master分支到当前分支。origin/master是本地不可编辑的

  39. git checkout -b serverfix origin/serverfix 可以在远程分支origin/serverfix(是本地的一个分支)的基础上分化出一个新的分支。
    从远程分支检出的本地分支,称为跟踪分支.git push,Git 会自行推断应该向哪个服务器的哪个分支推送数据. 而在这些分支里运行git pull 会获取所有远程索引,并把它们的数据都合并到本地分支中来。
    上一语句可简化为git checkout –track origin/serverfix。由git自行推断应该向哪个服务器的哪个分支推送数据。

  40. git push origin :bugfix 删除远程分支bugfix。冒号左边为空。译为提取空白然后把它变成远程分支bugfix

  41. 将一个分支整合到另一个分支的方法:merge 和rebase衍合(把另一分支的变动在当前分支重放一遍)。衍合能产生一个更为整洁的提交历史。二者得到的结果一样。

  42. git rebase –onto master server client 检出client 分支,找出client 分支和server 分支的共同祖先之后的变化,然后把它们在master 上重演一遍。接下来通过快进分支来使master合并到client(git checkout master;git merge client)。该语句不影响server分支。

  43. git rebase 主分支master 特性分支server //该语句将特性分支在主分支上重演一遍,不要求事先切换到主分支。

  44. 注意:衍合之后需要快进分支。

  45. 永远不要衍合那些已经推送到公共仓库的更新。公开的衍合会带来问题。如果把衍合当成一种在推送之前清理提交历史的手段,而且仅仅衍合那些永远不会公开的commit,那就不会有任何问题。如果衍合那些已经公开的commit,而与此同时其他人已经用这些commit 进行了后续的开发工作,那你有得麻烦了。

  46. 每提交一个新版本,实际上Git就会把它们自动串成一条时间线。
    在Git中,用HEAD表示当前版本,也就是最新的提交3628164…882e1e0,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
    要把当前版本回退到上一个版本:git reset –hard HEAD^
    此时最新的那个版本已经看不到了。只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个append GPL的commit id是3628164…,于是就可以指定回到未来的某个版本:git reset –hard 3628164
    Git提供了一个命令git reflog用来记录你的每一次命令。要重返未来,用git reflog查看命令历史。
    detached HEAD 表示当前处于一个不可修改的状态,可以通过git checkout -b new_branch 从当前tag创建一个分支
    reset与checkou的区别
    在master分支上,当前提交为3b03,使用git reset –hard HEAD^,将master重置到HEAD的父提交;该命令也可以写成git reset –hard HEAD^1
    checkout只会移动HEAD指针,reset会改变HEAD的引用值。

  47. 将分支branch-a的某次提交commitA应用到分支branch-b上:
    git checkout branch-b;
    git cherry-pick commitA;

  48. 以一次新的commit方式退回到之前的提交:
    git revert [-m 1] commitXXX

1 0