以下用法是在ubuntu系统下的用法,主要内容整理自'廖雪峰的官方网站'.

#1.安装git
$ sudo apt-get install git

#2.声明git账号
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

#3.创建版本库(假设库名为learngit)
$ mkdir learngit
$ cd learngit
$ git init
(接着创建一个文本文件readme.txt,并写入内容"hello")
$ git add readme.txt
$ git commit -m "wrote a readme file"

#4.查看git状态
$ git status
$ git diff  #查看修改内容

#5.查看提交版本号:
$ git log
$ git reflog  #未来的版本
$ git reset --hard commit_id

#6.撤消修改
$ git checkout -- readme.txt  #丢弃工作区的修改
$ git reset HEAD readme.txt  #丢弃暂存区的修改'

#7.删除文件
$ git rm test.txt
$ git commit -m "remove test.txt"

#8.创建SSH Key(在用户主目录下)
$ ssh-keygen -t rsa -C "dnxbjyj@126.com"
(在刚刚提示的目录下找到id_rsa.pub文件,用文本编辑器打开,复制里面的一长串字符)
(登录github,在账号设置里面找到SSH Keys页面,填入任意title,在Key文本框里复制进去刚刚复制的字符,然后点击Add Key,之后就能从本地push了)

#9.添加远程库
(在github建立远程库,假设建立的库名为learngit)
$ git remote add origin git@github.com:dnxbjyj/learngit.git  #关联远程库
$ git push -u origin master  #第一次推送master分支的所有内容
$ git push origin master  #后面推送master的所有内容
$ git remote rm origin  #断开和远程库的关联

#10.创建与合并分支
$ git branch  #查看分支
$ git branch <name>  #创建分支
$ git checkout <name>  #切换到某分支
$ git branch -b <name>  #创建并跳转到某分支
$ git merge <name>  #合并某分支到当前分支
$ git branch -d <name>  #删除某分支
$ git branch -D <name>    #强制删除没有合并完全的分支

#11.推送分支
$ git remote  #查看远程库的信息
$ git remote -v  #查看远程库的详细信息,显示可以抓取和推送的origin的地址
$ git push origin master  #向远程的origin推送本地的master分支

#12.抓取分支
$ git checkout -b dev origin/dev  #创建远程origin的dev分支到本地
$ git branch --set-upstream-to = origin/dev  #指定本地dev分支与远程origin/dev分支的链接
$ git pull  #把最新提交从origin/dev上抓取下来
(再合并分支,若出现冲突,则解决冲突,再add,commit)
$ git push origin dev  #push dev分支

#13.把最新的分支从origin/goods上抓取下来到当前本地分支:
$ git pull origin goods

#14.git clone远程仓库的某个分支到本地:
$ git clone -b goods git@github.com:senguo2014/senguo.cc.git  #clone远程的goods分支
#15.完整流程:
①拉远程库最新的代码到本地分支:
$ git fetch origin test:tmp #将远程库上origin目录下的test分支拉到本地库并在本地库创建tmp分支
或:
$ git pull origin test  #将远程库上origin下的test分支拉到本地当前分支上(会自动merge)
②切换到本地的working分支:
$ git checkout working
$ git branch  #查看当前分支
③写代码,修改代码.然后提交所有修改:
$ gti status  #查看当前分支状态
$ git add . #注:最后是一个点
$ git commit -a -m "hello"
④将本地的tmp分支合并到当前的working分支:
$ git merge tmp
⑤根据提示,打开代码文件逐一修改冲突.(HEAD<<<<<<<<<<<内容1=======内容2>>>>>>>working)
⑥冲突修改完以后,再merge一遍,然后将当前分支的内容提交到远程库的test分支上:
$ git push origin test
※※※※※※※※※※
总结:可以简略地归结为三步曲:
$ git fetch origin master:tmp  #将远程的master分支fetch到本地的tmp分支上,若tmp分支不存在,则自动新建.
$ git diff tmp
$ git merge tmp  #将当前分支和tmp分支merge
$ git push origin master:newbranch  #其中master表示本地master,newbranch表示在远程创建的新分支或远程已经有的分支.
※※※※※※※※※※
#16.删除远程test分支:
$ git push origin --delete test

#17.$ git push <远程主机名(origin)> <本地分支名>:<远程分支名>
 注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。
如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
#18.git的.gitignore不起作用的原因可能为:先添加到本地分支其他文件再添加的.gitignore文件
解决方法:先清空本地分支,然后先添加和提交.gitignore文件到本地分支,然后再添加提交其他文件到本地分支,然后再往远程分支推.
#19.git上fetch下来的文件的默认权限是100644,在这种权限下在本地是无法对代码进行修改的,需要chmod -R 777 workgit,然后对代码进行修改.在向远程push代码的时候,还要先把权限改回100644,这样才不会起冲突(这种修改权限的方法可能会失效,所以最好的解决方法就是不要修改权限,而用sudo权限打开sublime然后再编辑代码).
#20.在新建库后pull或clone的时候出现如下错误:
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
可能的解决的方法:
1.ssh-keygen...命令前加sudo,然后再按原来的步骤来做.

#21.公钥只与电脑有关,与是否新建仓库无关.\\

#22.查看历史版本:git log

    回滚到相应的版本号:git reset --hard  版本号

PS:

1.发现一个问题:当在终端不进入su模式时,git命令都可以自动补全,但是一旦进入su模式,不能自动补全.

随机推荐

  1. 着手打造你的随身系统---将linux装进移动硬盘

    将Ubuntu等linux系统安装到移动硬盘--操作系统随身携带 前言        刚刚接触ubuntu,听说可以将linux系统安装到移动硬盘上,所以最近一周都在尝试将ubuntu安装到新买的移动 ...

  2. flex初始化方法

    initalize是初始化,creationcomplete是创建完成,applicationComplete是应用程序中所有的实例都创建完成后才执行,三者的执行顺序是intalize creatio ...

  3. python 类成员的修饰符

    类的所有成员在上一步骤中已经做了详细的介绍,对于每一个类的成员而言都有两种形式: 公有成员,在任何地方都能访问 私有成员,只有在类的内部才能方法 私有成员和公有成员的定义不同:私有成员命名时,前两个字 ...

  4. Python Numpy ValueError: data type must provide an itemsize

    天朝网络锁国,百度找了半个小时找不出来原因,只能谷歌 谷歌第一条就是,顿时感觉幸福感来的太突然 原因是输入的矩阵均是字符串(从文件里读的) 那么就需要批量转数组,一行一行的转. 下面是我的代码: ro ...

  5. 【直播预告】7月18日3D游戏引擎免费公开课答疑,參与送C币!

    喜讯喜讯! 为了酬谢广大学员.CSDN学院特推出iOS和3D游戏引擎开发免费技术答疑公开课,让您度过一个充实的暑假~ 參与本次公开课,即有机会获得50C币! 答疑公开课时间:7月18日 晚7:30-9 ...

  6. java 证书 .cer 和 .pfx

    作为文件形式存在的证书一般有这几种格式: 1.带有私钥的证书 由Public Key Cryptography Standards #12,PKCS#12标准定义,包含了公钥和私钥的二进制格式的证书形 ...

  7. How to convert BigDecimal to Double in spring-data-mongodb framework

    问题描述:我们都知道对于涉及钱的数据必须使用BigDecimal类型进行存储,今天在查询mongo时仍然有精度问题,虽然我在代码中使用了Big Decimal类型,但mongo中使用的是double类 ...

  8. iOS面试题--Model层--沙盒的目录结构是怎么样的?各自一般用于什么场合?

    沙盒的目录结构是怎么样的?各自一般用于什么场合? 一.iOS沙盒机制 iOS的应用只能访问为该应用创建的区域,不可访问其他区域,应用的其他非代码文件都存在此目录下,包括图片,属性文件plist,bun ...

  9. log4j日志文件乱码问题的解决方法

    近日在AIX上用log4j打印日志,出现乱码,经过努力解决问题. 症状:在默认语言非中文(或者说默认语言不支持中文的)的Windows.Linux.Unix上,用log4j打印日志,出现乱码,常见的就 ...

  10. CentOS系统bash: groupadd: command not found问题

    如果我们需要在CentOS执行新建用户组命令的时候,需要进入到ROOT权限,如果你用以下命令: 1 su2 su root 进入到ROOT账户,那么会出现上述的错误信息:“bash: groupadd ...