文章目录
  1. 1. 关于git
  2. 2. 创建版本库
  3. 3. 工作区与暂存区
  4. 4. 管理修改
  5. 5. 撤销修改
  6. 6. 删除文件
  7. 7. 远程仓库
  8. 8. 分支管理
  9. 9. bug分支
  10. 10. 标签管理
  11. 11. github
  12. 12. .gitignore
  13. 13. 日常操作记录

学习廖雪峰git教程简单的笔记以及日常中的git操作心得。

关于git

git 分布式版本控制系统,分布式版本控制系统没有中央服务器,每个人的电脑上都是一个完整的版本库,所以工作的时候就不用联网了。多人协作的时候,只需要把自己的修改推送给对方。但是在实际使用的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能两个人不在同一个局域网内,两台电脑互相访问不了。所以分布式版本控制系统通常也有一台充当“中央服务器”的电脑。

创建版本库

版本库中的所有文件都可以被git管理起来

  • git status 查看工作区与最后一次提交的版本之间是哪个文件被修改了,git diff 是看文件被修改了什么

  • git log –petty=online 用于查看简化的提交信息

  • git reset –hard HEAD^ 回到上一个版本

  • git reflog 是用来记录当前所有对分支造成影响的操作,这可以看到版本号

  • git reset –hard 版本号 用于回到在git reflog 中显示的任意的版本号

工作区与暂存区

工作区有一个隐藏目录.git,这个不算工作区,而是git的版本库

git 的版本库中包括stage的版本区、我们保存的分支和指向当前分支的指针head

git add 是将工作区的修改放到暂存区,git commit 是将暂存区的修改一次性的提交到分支

管理修改

git diff HEAD – filename 命令可以查看工作区和版本库里面最新版本的区别

撤销修改

git checkout – file可以丢弃工作区的修改 ,若是修改后还没有被放到暂存区,撤销修改后会回到和版本库一模一样的状态
若是文件已经被添加到暂存区了,但是还没有提交,撤销修改后就回到添加到暂存区后的状态。

删除文件

git rm filename

远程仓库

git remote add origin 地址/.git 添加远程仓库

git push origin 。。。

分支管理

当创建一个分支dev 时,分支的dev指针最先指向的是master

  • 查看分支:git branch

  • 创建分支:git branch

  • 切换分支:git checkout

  • 创建+切换分支:git checkout -b

  • 合并某分支到当前分支:git merge

  • 删除分支:git branch -d

  • 用git log –graph命令可以看到分支合并图

合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。

如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息
合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并

bug分支

git stash 用来暂存未经commit 的分支现场,然后切换到另一个分支上进行bug修复,
恢复工作现场的方法是:

* git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
* 另一种方式是用git stash pop,恢复的同时把stash内容也删了

标签管理

Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),
所以,创建和删除标签都是瞬间完成的。tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。

  • 命令git tag 用于新建一个标签,默认为HEAD,也可以指定一个commit id :git tag commit.id ;

  • git tag -a -m “blablabla…”可以指定标签信息;

  • git tag -s -m “blablabla…”可以用PGP签名标签;

  • 命令git tag可以查看所有标签。 git show 查看标签信息

  • 命令git push origin 可以推送一个本地标签;

  • 命令git push origin –tags可以推送全部未推送过的本地标签;

  • 命令git tag -d 可以删除一个本地标签;

  • 命令git push origin :refs/tags/可以删除一个远程标签

github

参与开源项目 先 fork 项目到自己的账户,然后从自己的账户下clone 项目到本地,只有从自己的仓库进行clone,才能推送修改,然后可以送pull request给官方仓库来贡献代码

.gitignore

忽略文件的原则是:

  • 忽略操作系统自动生成的文件,比如缩略图等;
  • 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
  • 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件

    强制添加被.gitignore忽略的文件:git add -f filename

    发现可能.gitignore存在问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查 :
    git check-ignore -v filename

日常操作记录

  1. 从远程pull一个分支dev到本地分支dev-test
1
git pull origin dev:dev-test

这样会直接创建一个新的分支dev-test。

  1. 在本地Dev分支创建分支dev-test
1
git branch dev-test

这个dev-test分支会直接从dev中复制过来内容,而(1)中的dev-test则在创建时为空。

  1. 推送本地分支dev-test到远程dev

    1
    git push origin dev-test:dev
  2. 从一个现有的本地仓库 clone到本地的另一个仓库

    1
    git clone /e/aaanow/remote/testGit.git
  3. 从现有仓库连接这个刚刚clone的仓库

    1
    git remote add <name> /e/aaanow/remote/testGit/.git
  1. git stashgit stash pop
    git stash 用来暂存当前正在进行的工作。用于当想pull 最新代码, 又不想加新commit, 或者另外一种情况,为了修复一个紧急的bug,先stash, 使返回到自己上一个commit, 改完bug之后再stash pop, 继续原来的工作。

    1
    2
    3
    $git stash
    $do some work
    $git stash pop

    git stash savegit stash list

    Git stash save “work in progress for foo feature”

    当你多次使用’git stash’命令后,你的栈里将充满了未提交的代码,这时候你会对将哪个版本应用回来有些困惑,
    git stash list 命令可以将当前的Git栈信息打印出来,你只需要找到对应的版本号,例如使用’git stash apply stash@{1}’就可以将你指定版本号为stash@{1}的工作取出来,当你将所有的栈都应用回来的时候,可以使用’git stash clear’来将栈清空。

    1
    2
    3
    4
    5
    6
    7
    git stash # save uncommitted changes
    # pull, edit, etc.
    git stash list # list stashed changes in this git
    git show stash@{0} # see the last stash
    git stash pop # apply last stash and remove it from the list
    git stash --help # for more info
  2. git commit --amend用于修复上次已提交的文字

  3. git reset --soft 版本号git reset --hard 版本号
    git reset --soft 版本号是回到版本号所在的版本,即不再有这个版本号之后的版本,但是工作区仍存在这个版本号更改之后的代码。此命令可用于合并几次提交去除冗余的提交提示 的情况。
    git reset --hard 版本号 是回到版本号所在的版本,即不再有这个版本号之后的版本,并且工作区也不存在这个版本号更改之后的代码。此命令可用于去除不用的功能。
    若是想找到去除的代码,可用下面的命令:

    1
    2
    git reflog
    git reset --hard 版本号
  4. git fetchgit merge

1
2
3
git fetch origin master
git log -p master..origin/master
git merge origin/master

以上命令的含义:
首先从远程的origin的master主分支下载最新的版本到origin/master分支上
然后比较本地的master分支和origin/master分支的差别
最后进行合并
上述过程其实可以用以下更清晰的方式来进行:

1
2
3
git fetch origin master:tmp
git diff tmp
git merge tmp
文章目录
  1. 1. 关于git
  2. 2. 创建版本库
  3. 3. 工作区与暂存区
  4. 4. 管理修改
  5. 5. 撤销修改
  6. 6. 删除文件
  7. 7. 远程仓库
  8. 8. 分支管理
  9. 9. bug分支
  10. 10. 标签管理
  11. 11. github
  12. 12. .gitignore
  13. 13. 日常操作记录