git学习笔记

  • 首先了解一下工作区、暂存区

    • 工作区就是你在电脑里能看到的目录
    • 工作区里面的隐藏目录.git不算工作区(Mac显示隐藏文件方法:command+⬆️+. ),而是git的版本库(repository)
    • .git目录里面存有暂存区(叫做stage或者称为index)

      • git学习笔记_第1张图片
  • 整理一下传输过程

    • 工作区--add->暂存区--commit->本地仓库--push->远程仓库(一定要先add提交到暂存区,才能commit提交到当前分支,然后才push到远程仓库)

    • 远程仓库--clone->本地仓库

  • 设置git

$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
//设置身份内容有两条,一个是你的邮箱,另一个是你的称呼 ,以后你提交的代码都根据这个来确定是你

使用git向github托管

1.创建SSH key

  • 首先在终端输入

    ssh-keygen -t rsa -C "[email protected]"
    • 邮箱地址换成你自己的,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

    • 如果一切顺利的话,可以在用户主目录里找到.ssh目录(可能是隐藏目录),里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

  • 登陆GitHub --> settings -->SSH key --> New SSH key

git学习笔记_第2张图片

  • 进入添加SSH key页面后,Title随便填,key里面粘贴id_rsa.pub文件里的内容(如果无法解压,直接把文件拉进Key那个框)

  • GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

2. 先创建远程库再clone到本地

  • git学习笔记_第3张图片

  • clone到本地

$ git clone [email protected]:ganguan/test.git
// GitHub给出的地址不止一个,还可以用https://github.com/ganguan/test.git这样的地址
  • 如果要用.gitignore文件来忽略一些不上传的文件,到gitignore模版找自己需要的,再组合到自己的.gitignore文件,然后上传到仓库
    • gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。解决方法就是先把本地缓存删除(改变成untrack状态),然后再提交:

      git rm -r --cached .        
      git add .      
      git commit -m 'xxxx'
    • 有些时候,你想添加一个文件到git,但发现添加不了,原因是这个文件被.gitignore忽略了,可用 add -f filename.xxx强行添加。或者用 git check-ignore -v filename.xxx检查.gitignore哪个规则写错了(filename.xxx指的是添加不了的文件名)
  • clone后就会生成一个test的目录,之后你可以把代码放到该目录里,终端cd进入该目录后
$ git checkout -b branchName //新建分支branchName并跳转到该分支(当然也可以直接在主分支添加,不过创建分支比较安全)
$ git add .     
$ git commit -m "message" 
$ git push origin branchName
  • 至此,内容就传到远程仓库的branchName分支了,然后
$ git checkout master //切换回 master分支
$ git merge branchName
$ git push 
  • 这样就上传到主分支master了,可以删除branchName分支
$ git branch -d branchName  //删除后GitHub里面的该分支也要删除

3. 如果是已经在本地创建了一个git仓库,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步

  • 创建好github仓库后
$ git remote add origin [email protected]:ganguan/test.git 
$ git push -u origin master 

// ganguan/test分别换成你自己的账户名和仓库名 
// 添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的
/* 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,
还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。*/
  • 这样就完成关联了

  • 可能出现的错误:
    • fatal: remote origin already exists.
      • 说明该别名已经存在,可以另外建一个别名,或者使用“git remote rm origin”命令删除原来的别名,然后重新执行“git remote add origin [email protected]:yourname/xxxx.git”;
    • error: failed to push some refs to '[email protected]:xxx/xxx.git' hint: Updates were rejected because the remote contains work that you do not have locally....
      • 说明远程仓库的版本比本地仓库的要信,所以要先进行更新,才能提交。使用“git pull [email protected]:xxx/xxx.git”命令进行更新,地址自己相应替换掉。

git 命令

  • 具体参考文章git教程
     status         掌握当前分支的情况
     log              查看版本情况(如果嫌信息太多,看得眼花缭乱的,可以加上--pretty=oneline参数)
     log --graph --pretty=oneline --abbrev-commit        查看分支历史
     reset --hard 版本号           实现版本回退(版本号可从log查询,版本号只需前面一部分,不需要写全。  另一方式: HEAD^表示上一个版本号 HEAD^^表示上上个版本号 HEAD~100表示往上100个版本号)
     git reflog            记录每一次更改,在恢复旧版本后,可以通过此方式找回新版本号


    clone [email protected]:ganguan/test.git         克隆此仓库到本地,产生一个文件夹
    push origin branchname          本地修改的内容同步到远程版本库
    fetch origin branchname          将远程版本库上的修改同步到本地
    merge my_branch                      合并指定分支(my_branch)到当前分支
    merge --no-ff -m "merge with no-ff" mybranch            合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并.因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
    rebase             把本地未push的分叉提交历史整理成直线
    pull                  相当于fetch和merge放在一起执行
    remote            查看远程库信息(remote -v 会显示更详细信息)   
    remote add origin [email protected]:liaoxuefeng/learngit.git(仓库git地址)     将本地库与远程库连接


    branch            列出所有分支,当前分支前面会标一个*号
    checkout        选择分支   注意区别->(checkout --  filename.xxx 撤销当前文件的修改,回到最近一次git commit或git add时的状态,即用版本库里的版本替换工作区的版本)
    branch my_branch            创建分支
    branch -d my_branch        删除分支(强行删除要用大写 -D)
    checkout -b my_branch         新建分支my_branch并跳转到该分支(相当于两条指令$ git branch dev  $ git checkout dev)


    stash                  把当前工作现场“储藏”起来,等以后恢复现场后继续工作
    stash list            查看所有stash
    stash apply        恢复后不删除stash
    stash drop          删除stash
    stash pop           恢复到之前的工作现场,并删除此stash(相当于以上两步)
    stash apply stash@{0}        恢复到指定的stash@{0}
    cherry-pick 版本号              复制一个特定的提交到当前分支(修复bug时,先修复master的bug。因为其他分支是从master分出来的,所以也存在这个bug,所以切换到分支,复制修复master分支bug时的提交版本)


    tag name (版本号)        为分支打标签
    show tagname              查看此标签信息
     tag -a v0.1 -m "version 0.1 released" 1094adb        为标签添加说明,-a指定标签名
    tag -d tagname        从本地删除标签
    tag push origin tagname        将此标签推送到远程
    tag push origin —tags        一次性推送全部未推送到远程的本地标签
    push origin :refs/tags/tagname         对于已经推送到远程的标签,要先tag -d tagname从本地删除,再调用此方法从远程删除


    diff filename.xxx         比较不同,找出修改的地方
    rm filename.xxx          删除文件(如果先手动删除文件再使用此方法,则相当于 git add)

你可能感兴趣的:(git学习笔记)