添加远程库
初始化git本地全局配置
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
添加远程库之前首先要在本地生成一个rsa的密钥,要把公钥添加到github你的帐号里面,这样你就可以克隆和关联远程文件。
输入命令:
ssh-keygen -t rsa -C"youremail@example.com"
使用上述语句 生成rsa密钥
系统会提示你保存在哪里,你按照提示操作即可;
不这样的话会提示
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
所以必须先把你的公钥添加到你的github帐号里面,这样你就可以克隆和关联任何远程文件了。
你可以直接clone远程仓库:
git clone git@gitee.com:angryMonkey/koala-online-box.git
或者你可以关联远程仓库:
git remote add origin https://github.com/AngryCodeDog/learngit.git
然后可以直接拉取:
git pull origin master
(如果你的仓库是完全新建的,这样就会在本地创建一个master分支,并且下载下远程仓库的内容,在本地文件夹也可以直接查看的到下载下来的文件)
git fatch origin master
//这个是拉取远程仓库最近的更新内容,下载到本地后,你是直接查看不到文件的,因为下载到了某个分支,必须用git命令才可以查看。然后查看本地与远程文件有没有什么不一样,
git fetch [remote-name]
此命令会到远程仓库中拉取所有你本地仓库中还没有的数据.运行完成后,你就可以在本地访问该远程仓库中的所有分支,将其中某个 分支合并到本地,或者只是取出某个分支,一探究竟.
如果是克隆了一个仓库,此命令会自动将远程仓库归于 origin 名下.所以,git fetch origin 会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以来别人提交的更新).有一点很重要,需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并.(说 明:事先需要创建好远程的仓库,然后执行:git remote add [仓库名] [仓库url],git fetch [远程仓库名],即可抓取到远程仓库数据到本地,再用git merge remotes/[仓库名]/master就可以将远程仓库merge到本地当前branch.这种分支方式比较适合独立-整合开发,即各自开发测试好后 再整合在一起.比如,Android的Framework和AP开发.
更换远程仓库
1.修改命令
git remote set-url origin [url]
例如:git remote set-url origin git@github.com:AngryCodeDog/pythonxx.git
2.先删后加
git remote rm origin
git remote add origin [url]
git分支操作
- 查看分支:git branch
- 创建分支:git branch
- 切换分支:git checkout
- 创建+切换分支:git checkout -b
- 合并某分支到当前分支:git merge
- 删除分支:git branch -d
Git fetch和git pull的区别
1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge
git fetch origin master
git log -p master..origin/master
git merge origin/master
以上命令的含义:
首先从远程的origin的master主分支下载最新的版本到origin/master分支上
然后比较本地的master分支和origin/master分支的差别
最后进行合并
2. git pull:相当于是从远程获取最新版本并merge到本地
git pull origin master
上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些
因为在merge前,我们可以查看更新情况,然后再决定是否合并
git创建本地分支并提交
git branch mybranch1
即可创建一个mybranch1的分支
我们可以通过命令查看
git branch
* master
mybranch1
可以看到这里有两个分支。
我们切换分支
git checkout mybranch1
git branch
master
* mybranch1
我们可以看到成功切换到了mybranch1分支。
接着提交本地分支
git push origin mybranch1
这样在github就会自动创建一个mybranch1的分支
另外我们也可以这样提交:
$ git push <远程主机名> <本地分支名>:<远程分支名>
比如我要将本地的wy分支推送到远程wy分支
git push origin wy:wy
git本地分支改名
git branch -m oldbranchname newbranchname
git拉取远程分支到本地
首先把远程更新先获取下来
git fetch
然后查看远程分支情况
git branch -r
接着我们采用如下命令:
git checkout -b 本地分支名x origin/远程分支名x
使用该方式会在本地新建分支x,并自动切换到该本地分支x。
或者采用:
git fetch origin 远程分支名x:本地分支名x
使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。
git回滚到任意版本
$ git log -3
commit 4dc08bb8996a6ee02f
Author: Mark <xxx@xx.com>
Date: Wed Sep 7 08:08:53 2016 +0800
xxxxx
commit 9cac9ba76574da2167
Author: xxx<xx@qq.com>
Date: Tue Sep 6 22:18:59 2016 +0800
improved the requst
commit e377f60e28c8b84158
Author: xxx<xxx@qq.com>
Date: Tue Sep 6 14:42:44 2016 +0800
changed the password from empty to max123
回滚到指定的版本
git reset --hard e377f60e28c8b84158
git放弃本地修改:
git checkout . #本地所有修改的。没有的提交的,都返回到原来的状态
git stash #把所有没有提交的修改暂存到stash里面。可用git stash pop回复。
git reset --hard HASH #返回到某个节点,不保留修改。
git reset --soft HASH #返回到某个节点。保留修改
git在任意版本切换
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset –hard commit_id。
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
注意:
当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来的,此时,只需执行如下命令:
git submodule update –init –recursive
即可将子模块内容下载下来后工程才不会缺少相应的文件。
git 查看某次提交内容
git show commit-hashcode(指定的某个commit版本)
合并某个分支上的单个commit
git cherry-pick 62ecb3
合并某个分支上的一系列commits
我们先创建一个新分支并指定到某个commit
git checkout -b newbranch 62ecb3
这样我们便可以从当前分支在某个指定的commit处分一个分支出来。
然后,rebase这个新分支的commit到master(–ontomaster)。76cada^ 指明你想从哪个特定的commit开始。
git rebase --onto master 76cada^
git错误提交、撤销
1. git add 添加 多余文件
这样的错误是由于, 有的时候 可能
git add .
(空格+ 点) 表示当前目录所有文件,不小心就会提交其他文件
git add
如果添加了错误的文件的话
撤销操作
git status
先看一下add 中的文件
git reset
HEAD 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了
git reset
HEAD XXX/XXX/XXX.java 就是对某个文件进行撤销了
2. git commit 错误
如果不小心 弄错了 git add后 , 又 git commit 了。
先使用
git log 查看节点
commit xxxxxxxxxxxxxxxxxxxxxxxxxx
Merge:
Author:
Date:
然后
git reset commit_id
PS:还没有 push 也就是 repo upload 的时候
git reset commit_id
(回退到上一个 提交的节点 代码还是原来你修改的)
git reset –hard commit_id
(回退到上一个commit节点, 代码也发生了改变,变成上一次的)
3.如果要是 提交了以后,可以使用 git revert
还原已经提交的修改
此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交
git revert HEAD 撤销前一次 commit
git revert HEAD^ 撤销前前一次 commit
git revert commit-id (撤销指定的版本,撤销也会作为一次提交进行保存)
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。