Git基础操作

配置秘钥

1.检查本机有没有秘钥

检查~/.ssh看看是否有名为d_rsa.pubid_dsa.pub的2个文件。

$ ~/.ssh
bash: /c/Users/lenovo/.ssh: Is a directory

2.如果没有就创建新的秘钥

$ ssh-keygen -t rsa -C "注册Github用的邮箱"  
$ ssh-keygen -t rsa -C "注册Github用的邮箱"

按照提示一路输入即可。

ssh-keygen -t rsa -C "YOUR_EMAIL@YOUREMAIL.COM" -f ~/.ssh/yourName

这样会生成自定义的名字的秘钥。

3.将ssh key添加到github

id_rsa.pub里面是公钥,id_rsa里面是私钥。将id_rsa.pub公钥里的内容复制粘贴到你的github账号里。

去github找settings->>SSH and GPG keys->>New SSH key,Title自己起一个名字,然后把秘钥粘贴到Key里保存即可。

4.测试ssh key是否添加成功

$ ssh -T git@github.com # 用 ssh 连接 github
$ ssh -T git@github.com

Are you sure you want to continue connecting (yes/no)?选择yes后会提示连接成功。

git基础操作

git clone

$ git clone <版本库的网址>

从代码仓库克隆一个版本库。

该命令会在本地主机生成一个目录,与远程主机的版本库同名。如果要指定不同的目录名,可以将目录名作为git clone命令的第二个参数。

$ git clone <版本库的网址> <本地目录名>

除了https协议,git clone还支持其他协议。

$ git clone http[s]://example.com/path/to/repo.git/
$ git clone ssh://example.com/path/to/repo.git/
$ git clone git://example.com/path/to/repo.git/
$ git clone /opt/git/project.git 
$ git clone file:///opt/git/project.git
$ git clone ftp[s]://example.com/path/to/repo.git/
$ git clone rsync://example.com/path/to/repo.git/

git remote

为了便于管理,Git要求每个远程主机都必须指定一个主机名。git remote命令就用于管理主机名。

不带选项的时候,git remote命令列出所有远程主机。

$ git remote
origin

使用-v选项,可以参看远程主机的网址。

$ git remote -v
origin  git@github.com:jquery/jquery.git (fetch)
origin  git@github.com:jquery/jquery.git (push)

克隆版本库的时候,所使用的远程主机自动被Git命名为origin。如果想用其他的主机名,需要用git clone命令的-o选项指定。

$ git clone -o jQuery https://github.com/jquery/jquery.git
$ git remote
jQuery

git remote show命令加上主机名,可以查看该主机的详细信息。

$ git remote show <主机名>

git remote add命令用于添加远程主机。

$ git remote add <主机名> <网址>

git remote rm命令用于删除远程主机。

$ git remote rm <主机名>

git remote rename命令用于远程主机的改名。

$ git remote rename <原主机名> <新主机名>

git fetch

一旦远程主机的版本库有了更新(Git术语叫做commit),需要将这些更新取回本地,这时就要用到git fetch命令。

$ git fetch <远程主机名>

git fetch命令通常用来查看其他人的进程,因为它取回的代码对你本地的开发代码没有影响。

默认情况下,git fetch取回所有分支(branch)的更新。如果只想取回特定分支的更新,可以指定分支名。

$ git fetch <远程主机名> <分支名>

所取回的更新,在本地主机上要用"远程主机名/分支名"的形式读取。比如origin主机的master,就要用origin/master读取。

git branch

git branch命令的-r选项,可以用来查看远程分支,-a选项查看所有分支。

$ git branch -r
origin/master

$ git branch -a
* master
  remotes/origin/master

上面命令表示,本地主机的当前分支是master,远程分支是origin/master

git checkout

git checkout用于切换分支

取回远程主机的更新以后,可以在它的基础上,使用git checkout命令创建一个新的分支。

$ git checkout -b newBrach origin/master

上面命令表示,在origin/master的基础上,创建一个新分支。

git merge

$ git merge origin/master
# 或者
$ git rebase origin/master

上面命令表示把origin/master合并到当前分支

git rebase

$ git checkout mywork
$ git rebase origin

这些命令会把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到"mywork"分支上。

当rebase的时候,会出现冲突的情况,git会停止rebase让你解决冲突,在解决完冲突后,用git-add命令去更新这些内容的索引,然后执行git rebase --continue,这样git会继续剩下的补丁,在任何时候,可以使用--abort来终止rebase,mywork分支会回到rebase开始前的状态。

$ git rebase --continue
$ git rebase --abort

git status

用于查看当前分支状态

git diff

用于查看修改内容或冲突

git pull

git pull命令的作用是,取回远程主机某个分支的更新,再与本地的指定分支合并。它的完整格式稍稍有点复杂。

$ git pull <远程主机名> <远程分支名>:<本地分支名>

如果远程分支是与当前分支合并,则冒号后面的部分可以省略。

$ git pull origin next

上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge

$ git fetch origin
$ git merge origin/next

在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动"追踪"origin/master分支。

Git也允许手动建立追踪关系。

git branch --set-upstream master origin/next

上面命令指定master分支追踪origin/next分支。

如果当前分支与远程分支存在追踪关系,git pull就可以省略远程分支名。

$ git pull origin

上面命令表示,本地的当前分支自动与对应的origin主机"追踪分支"(remote-tracking branch)进行合并。

如果当前分支只有一个追踪分支,连远程主机名都可以省略。

$ git pull

如果合并需要采用rebase模式,可以使用--rebase选项。

$ git pull --rebase <远程主机名> <远程分支名>:<本地分支名>

如果远程主机删除了某个分支,默认情况下,git pull 不会在拉取远程分支的时候,删除对应的本地分支。这是为了防止,由于其他人操作了远程主机,导致git pull不知不觉删除了本地分支。

但是,你可以改变这个行为,加上参数 -p 就会在本地删除远程已经删除的分支。

$ git pull -p
# 等同于下面的命令
$ git fetch --prune origin 
$ git fetch -p

git push

git push命令用于将本地分支的更新,推送到远程主机。

$ git push <远程主机名> <本地分支名>:<远程分支名>

注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。

如果省略远程分支名,则表示将本地分支推送与之存在"追踪关系"的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

$ git push origin master

上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。

如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。

$ git push origin :master
# 等同于
$ git push origin --delete master

上面命令表示删除origin主机的master分支。

如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。

$ git push origin

上面命令表示,将当前分支推送到origin主机的对应分支。

如果当前分支只有一个追踪分支,那么主机名都可以省略。

$ git push

不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。

$ git push --all origin

上面命令表示,将所有本地分支都推送到origin主机。

小结

git status 查看状态

git diff 查看不同
git add . 添加所有修改
git commit -m 'commit name'  提交所有修改并命名
git push origin mywork  将mywork本地分支推到远程仓库
              
git pull 拉远程代码然后直接合并到本地
==
git fetch origin branch-name 拉远程代码
git merge branch-name  合并
              
git branch -d mywork   删除本地分支mywork
git push origin :mywork  删除远程分支mywork
              
   
git branch -a  列出所有分支
              
git checkout -b branch-name  新建分支
git checkout -- views/index.html   取消修改


git clean -f  删除 untracked files
git clean -fd 连 untracked 的目录也一起删掉


git checkout mywork   切换分支
git rebase develop    将远程的最新更新到本地,再把本地的修改加上
              
              
在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:$ git rebase --continue。这样git会继续应用(apply)余下的补丁。
在任何时候,你可以用--abort参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。
$ git rebase --abort

git log --graph --all --oneline 查看日志

以下两个操作可以用来恢复本地删除的文件

git reset HEAD  文件路径名

git checkout 文件路径名

posted @ 2016-09-24 10:12  hahazexia  阅读(561)  评论(0编辑  收藏  举报