前言
复习git时重新记录了一边,所以记录得比较简洁,以便一时没用Git后面又把各种命令啥的都忘了。
Git下载地址
使用:
在使用前必须配置账号和邮箱
git config --global user.name “wukong.sun” # 请换成你自己的名字,除非你凑巧也叫wukong.sun
git config --global user.email “wukong.sun@qunar.com” # 同上
global收全局配置,所有连接都可以用,如果想用不同的账户邮箱登录,则可以进到这些本地repository的目录后,执行类似下面命令:
git config user.name “xingzhe.sun”
git config user.email “xingzhe.sun@huaguoshan.org”
上述命令没有加“–global”参数,因而是针对具体本地repository的。这些配置的优先级高于全局配置,因此连接时会起作用。
想要用SSH方式clone项目时,还需要配置SSH
生成ssh key pair
ssh-keygen -t rsa -C “wukong.sun@qunar.com”
查看公钥
cat ~/.ssh/id_rsa.pub
把公钥加到github’或者gitlab等管理平台上,后面就可以直接用ssh’方式clone项目了
Git原理简单图解
常用Git命令解释
git init—初始化本地仓库
git add —提交到暂存区
git commit —提交到本地仓库(本地master分支)
git clone—clone远程仓库到本地
git push—将本地仓库推送到远程仓库
git pull—同步远程仓库到工作区
git status—本地仓库的当前状态
git diff—查看与前一个版本的区别
git log—显示提交日志
关联一个远程仓库
要关联一个远程库,使用命令git remote add origin https/ssh;
关联后,使用命令git push -u origin master
第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
版本回退
head表示当前版本,head^表示前一个版本,head^^表示,前100个版本就是head~100;
当我们要进行版本回退时:
$git reset -hard head^
$git reser -hard 1094a(版本号,git log 可以显示)
$git relog —显示你的所有历史提交,包括已经撤销的
$git checkout – fileanme—丢弃工作区的修改
$git reset HEAD filename—丢弃暂存区的的修改,重新放回工作区
分支
-
第一步,dev分支,然后切换到dev分支:
$ git checkout -b dev
Switched to a new branch 'dev
-
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
-
然后,用git branch命令查看当前分支:
$ git branch
* dev
master
git branch命令会列出所有分支,当前分支前面会标一个*号。 -
然后,我们就可以在dev分支上正常提交,比如对readme.txt做个修改,加上一行:
Creating a new branch is quick.
然后提交:$ git add readme.txt
$ git commit -m "branch test"
[dev b17d20e] branch test
1 file changed, 1 insertion(+)
-
现在,dev分支的工作完成,我们就可以切换回master分支:
$ git checkout master
Switched to branch 'master'
-
现在,我们把dev分支的工作成果合并到master分支上:
$ git merge dev
Updating d46f35e..b17d20e
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。当然,也不是每次合并都能Fast-forward
-
合并完成后,就可以放心地删除dev分支了:
$ git branch -d dev
Deleted branch dev (was b17d20e).
删除后,查看branch,就只剩下master分支了:$ git branch
* master
因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。
远程先开好分支然后拉到本地
git checkout -b feature-branch origin/feature-branch
//检出远程的feature-branch分支到本地
本地先开好分支然后推送到远程
$ git checkout -b feature-branch
//创建并切换到分支feature-branch
$ git push origin feature-branch:feature-branch
//推送本地的feature-branch(冒号前面的)分支到远程origin的feature-branch(冒号后面的)分支(没有会自动创建)
Git多人工作模式
多人协作的工作模式通常是这样:
- 先,可以试图用
git push origin <branch-name>
推送自己本地某分支的修改; - 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
- 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用
git push origin <branch-name>
推送就能成功! - 如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令
git branch --set-upstream-to <branch-name> origin/<branch-name>
。
小结
- 查看远程库信息,使用git remote -v;
- 本地新建的分支如果不推送到远程,对其他人就是不可见的;
- 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
- 在本地创建和远程分支对应的分支,使用git checkout -b branch-name
origin/branch-name,本地和远程分支的名称最好一致; - 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name
origin/branch-name; - 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。