廖雪峰老师git教程笔记

1. 创建版本库 

  命令:git init

2. 提交文件      

  命令: git add <fileName>  

      git add .       //增加所有文件

                   git commit -m "提交备注信息"   

                   git commit <fileName> -m"只提交file1" 提交指定文件

3. 查看提交记录日志 

      命令:git log

                   git log --pretty=oneline    

$ git log --pretty=oneline
aeeebd9b1c514fe6d922284aa9e20893c33d8502 (HEAD -> master) 新增第三行
7decb271aa65f74bbe3ff59ef9ec7be02cda2fe1 新增一行
d2a4bf09538d3991cc879f07864ceaa59cc78af7 add file1.txt

注:前面为git版本号
$ git log --oneline 也可以显示日志,只不过前面版本id不是全id
如 $ git log --oneline d2a4bf0 (HEAD -> master) add file1.txt

  如果提交的历史纪录很长,回车会逐步显示,输入q可以退出

4. 还原到上个版本 

  git reset --hard HEAD^ 后面^代表第几个版本 ,^^代表还原到pre 2版本

       git reset --hard HEAD~100  //还原到前100个版本  

5. 回退到指定版本

  git reset --hard commit_id(可以不写全)  如 git reset --hard d2a4bf

6.查看所有操作命令 

  git reflog

7. 撤销修改  git checkout -- <fileName>

                     只是修改了工作区的readme.txt还未add,可以直接git checkout  -- readme.txt 文件会撤销修改

                     已经add后使用git reset HEAD readme.txt 然后git checkout -- readme.txt 文件会撤销修改

                   

  只要没有提交 都可以使用git checkout -- <fileName>还原,已经commit的需要使用git resest --hard HEAD^版本回退 

8. 文件删除   

       删除命令如下:

       rm <fileName>  类似直接在文件夹中删除

       git rm <fileName>

       git commit -m "message"

  误删时只要没有提交 都可以使用git checkout -- <fileName>还原,已经commit的需要使用git resest --hard HEAD^版本回退, git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

   

   1).批量删除多个文件可以使用上述方法提交,但过于繁琐,首先需要清楚下面命令意思:   

          git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。 

          git add -u :他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写) 

          git add -A :是上面两个功能的合集(git add --all的缩写) 

        故一次性删除多个文件,可以使用命令:

        git add -A

        git commit -m 'msg'

  2).删除文件夹:

       git rm -rf <文件夹名>

      git add -A

 9.远程仓库  

  第1步:创建SSH Key 在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:$ ssh-keygen -t rsa -C "youremail@example.com"你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

       第2步:登录github -->setting-->ssh keys   粘贴id_rsa.pub内容

注:GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送

10.添加远程库

     在github上新建repository,用来同步关联本地repository,如在github创建learngit库使用下面命令关联本地库

     命令:$ git remote add origin git@github.com:你的git账号/learngit.git

     然后推送本地库内容到远程库,命令:$ git push -u origin master 【把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程,由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。】

     第一次推送后,每次本地库提交后,都可以使用 $ git push origin master命令同步推送到远程库。

     删除与远程库的关联 git remote rm origin

11.从远程库克隆

    GitHub远程库详情页复制remote url(远程库连接)然后使用命令:$ git clone git@github.com:git账号/库名称.git     

    $ git clone git@github.com:seanzhang1988/clonefromgithub.git  

    或 

    $ git clone  https://github.com/seanzhang1988/CloneFromGitHub.git

    

12. 分支

    git 默认一个分支master,可以创建分支分支提交不影响master,分支提交完毕后可以合并master并可以删除新创建的分支

      创建分支:git branch dev

      切换分支:git checkout dev

      上述两个可以合并 git checkout -b dev

      查看当前分支:git branch 

      合并分支:git merge dev  (dev分支工作结束后master合并)

      删除分支:git branch -d dev

      合并时保存分支信息  $ git merge --no-ff -m "merge with no-ff" dev

13.bug分支           

  出现bug后,可以新建临时分支处理bug,处理完毕后合并并删除临时分支。但是当你正在dev分支处理别的任务且还未完成,此时让你来处理bug又该如何操作?git提供stash功能git stash,即暂时存储dev分支,然后切换master分支创建bug分支,bug分支修改完毕提交后合并并删除bug分支,再继续dev分支的工作,此时使用命令:$ git stash pop 恢复dev正在进行的工作提交后合并会显示bug分支修改的内容和dev分支内容。

14.多人协作

  查看远程库信息 git remote 或者 git remote -v

       推送本地分支到远程  git push origin dev

       场景:A创建dev分支修改后提交到远程,如果B也想在dev上修改东西必须创建远程origindev分支到本地,命令:git checkout -b dev origin/dev,有可能A的最新提交和B有冲突,B须使用git pull拉取最新的提交,然后在本地合并解决冲突后推送。拉取失败原因是没有指定本地dev分支与远程origin/dev分支的链接(specify which branch you want to merge with),命令:git branch --set-upstream-to=origin/dev dev,然后再git pull. 拉取成功后合并有冲突须手动解决,然后在提交push.

15.标签管理

  首先切换到需要打标签的分支然后git tag <标签名>,标签都是打在commit上的,使用命令git log --pretty=oneline --abbrev-commit查找commit id,然后 git tag <标签名> commit id打标签,如:git tag v0.9 76afcc2,使用命令 git show <tagName> 查看标签信息。命令git tag -a<tagName> -m "标签描述",可以给标签添加解释信息。

删除标签:git tag -d v0.1

推送标签到远程:git push origin <tagName> 或一次性推送全部标签 git push origin --tags

删除已推送远程的标签:git tag -d v0.1(先删除本地),git push origin :refs/tag/v0.1(再删远程)。

16.使用GitHub

  在GitHub上点击fork就可以在自己账号下自动创建相应仓库,这样我们可以修改推送自己的仓库,如果直接克隆别人的库到本地,我们没有权限推送修改,但是可以在github上发起pull request请求。

17.使用Gitee 码云

   1.上传自己的SSH公钥,用户主目录 .ssh/id_rsa.pub 文件内容粘贴

   2. gitee上新建项目hk001

        3. 新建文件夹hk001右键git bash,使用命令git init新建本地仓库,项目代码粘贴到hk001

        4. 本地库代码提交

        5. 关联远程库,git remote add origin git@gitee.com:gitee账号/hk001.git

        6. 推送远程库,git push  -u origin master

        注意:如果推送失败需要先拉取远程库git pull,拉取如果报错:fatal:refusing to merge unrelated histories可以使用命令:git pull origin master --allow-unrelated-histories,然后再git pull再推送。

       推送处理过程:

                             

           git支持关联多个远程库,本地库既可以关联github也可以关联gitee. 注意远程库名称不是origin

   step1.关联github远程库:git remote add github git@github.com:账号/hk001.git

           step2.关联gitee远程库:  git remote add gitee   git@gitee.com:账号/hk001.git

           step3. 推送远程库:         git push github master  git push gitee master

 18.忽略特殊文件

    项目中有些文件不需要推送到远程库,可以在git本地库根目录创建 .gitignore文件,然后把要忽略的文件名写进去,git会自动忽略这些文件。https://github.com/github/gitignore 提供了各种配置文件,里面有visualstudio.gitignore把该文件放入项目根目录。 然后推送到GitHub.  

     命令:git add -f <fileName> 可以强制添加被 .gitignore忽略的文件

    

    19.实战修改文件后推送远程

       1.查看状态

  $ git status

  On branch master
  Your branch is up to date with 'origin/master'.

  nothing to commit, working tree clean


  2.查看当前分支
  $ git branch
  * master

  3.创建工作分支
  $ git checkout -b Feat_sean
  Switched to a new branch 'Feat_sean'

  4.修改文件后加入暂存区
  $ git add README.md

  5.提交文件
  $ git commit -m "modified README.md"
  [Feat_sean be12fa6] modified README.md
  1 file changed, 1 insertion(+), 6 deletions(-)

  6.推送到远程
  $ git push -u origin Feat_sean
  Counting objects: 3, done.
  Delta compression using up to 4 threads.
  Compressing objects: 100% (2/2), done.
  Writing objects: 100% (3/3), 301 bytes | 301.00 KiB/s, done.
  Total 3 (delta 1), reused 0 (delta 0)
  remote: Powered by Gitee.com
  To https://gitee.com/moce-technology/hk001
  * [new branch] Feat_sean -> Feat_sean
  Branch 'Feat_sean' set up to track remote branch 'Feat_sean' from 'origin'.

  7.查看状态
  $ git status
  On branch Feat_sean
  Your branch is up to date with 'origin/Feat_sean'.

  nothing to commit, working tree clean

  8.切换主分支
  $ git checkout master
  Switched to branch 'master'
  Your branch is up to date with 'origin/master'.

  9.合并分支
  $ git merge Feat_sean
  Updating df5a59b..be12fa6
  Fast-forward
  README.md | 7 +------
  1 file changed, 1 insertion(+), 6 deletions(-)

  10.删除工作分支

  $ git branch -d Feat_sean
  Deleted branch Feat_sean (was be12fa6).

posted @ 2018-09-17 15:54  sean-日积月累  阅读(264)  评论(0编辑  收藏  举报