)赋权限
进入目录 cd .ssh/
命令: ssh-keygen
获取key: vim id_rsa.pub

2)
安装 apt-get install git-core
获得 git clone git://url
访问 http://url/gitweb

3)纳入版本控制:
git add *.txt //添加指定文件
git add README //添加单个文件
git add . //添加所有文件包括子目录,但不包括空目录

4)提交:
git commit -m “no1” //全部提交
git commit -m “no1” someFile //提交指定文件
git commit -C HEAD -a —amend //复用HEAD留言,增补提交(修改小错误,而不增加提交记录,掩盖自己的小马虎)

-m “提交的说明”
-a 动把所有已经跟踪过的文件暂存,并提交.(工作目录中修改过的文件都提交到版本库,不需一个一个手动add了)
—amend 增补提交
-C 复用指定提交的提交留言
-c 打开编辑器在已有的提交基础上编辑修改

5)查看提交历史:
git log
这时“j”向下浏览,“k”向上浏览,“q”退出

6)问责:查明谁修改了代码
git blame hello.html //查看修改过文件的人
git blame -L 12,+10 hello.html //12到22行 用"-L"参数在命令(blame)中指定开始和结束行:
blame还可以跟踪内容复制,文件复制

7)撤销缓存区的修改(没有commit的)

git checkout head 文件名 //撤销暂存区的修改
git checkout head readme.txt todo.txt
git checkout head *.txt
git checkout head . //撤销所有

8)反转提交:

git revert HEAD //创建一个反向的新提交抵消原来的提交改动
如果需要反转多个,必须从最后的开始反转, 加 -n可以不马上提交,之后一起提交。
git revert -n HEAD
git revert -n 54efhds
git commit -m “revert head and 54efhds”

9)复位:还没有commit,让工作目录回到上次提交时的状态

git reset —hard HEAD //所有未提交的内容清空,这会让"git diff" 和"git diff —cached"命令的显示法都变为空
git reset —soft HEAD //复位版本库,暂存差异,便于提交中发现错误需要更改时有用(例如私人密码放到里边了)

10)分支:

在当前分支末梢建立分支:

git branch RB_1.0(建立分支不会自动切换过去)

切换分支:

git checkout RB_1.0(切换到RB_1.0分支)

创建并切换分支:

git checkout -b RB_1.0(简化上边2步操作)

删除分支:

git branch -d RB_1.0

基于某次提交、分支或标签创建新分支:

git branch RB_1.0 master
git branch RB_1.0 6fe57de0
git branch Rb_1.01 1.0

查看分支:
git branch -r //显示远程分支
git branch -a //列出所有分支

分支重命名:

git branch -m master mymaster
-M 大写M会覆盖同名的分支

合并分支:

直接合并:
git merge 想合并到当前分支的源分支名
git merge —no-commit 分支 //合并但不提交

压合合并:将分支压合成一条commit记录,并合并过来
git merge —squash 某bug分支
git commit -m “修复某bug”

拣选合并:只合并一个提交
git cherry-pick 321d76f
如果需要连续拣选,就需要加 -n参数
然后再git commit ,但不要加-m参数,编辑器就会使用刚拣选的提交留言作为现在的留言。

11)标签Tag:

查看标签:

git tag

创建标签:

git tag 1.0 //在当前分支最后一次提交创建标签
git tag 1.0 RB_1.0 //基于RB_1.0分支的最新踢脚创建标签
git tag 1.0 ae468d8kt //为某次提交创建标签

检出标签:

git checkout 1.0 //检出标签与检出分支一样操作,但检出标签后用git branch查看本地分支会发现你现在不再任何分支上
这时你不应该修改,而应该立即基于此标签创建一个分支
git checkout -b from-1.0

12)变基:

1)git rebase RB_1.01 //也许修改过一个bug,希望新版本变基到RB_1.01分支上
2)手动解决冲突 //如果解决不了直接git rebase -skip或-abort来跳过特定提交或完全放弃变基
3)git add xxx.html //冲突解决
4)git rebase —continue

//—onto参数可以改写历史抹掉中间的参数,将倒数第一个参数变基到倒数第3个参数,为防止出错建议在试验性分支上先试验。

rebase -i 可以排序历史记录,多个提交合并为1个,一个提交分解成多个提交 ,
详见版本控制之道p86 ,需要编辑器支持,windows记事本不行

13)远程相关:

git clone git://github.com/schacon/grit.git //从现有仓库克隆
git clone git://github.com/schacon/grit.git mygrit //换名,唯一区别就是新建的目录成了mygrit,其他都一样

添加远程仓库:

git remote add pb git://github.com/paulboone/ticgit.git
clone会默认添加origin仓库,如果原本用git init创建的版本库,后来又想提交到远程版本库,就可以用下边的办法
git remote add origin git@example.com:/xxxxxx

查看远程分支:

git remote -v //查看远程仓库,默认clone后,应该有一个origin仓库,-v显示对应的clone地址
git remote show origin //查看远程仓库信息

远程仓库重命名和删除:

git remote rename pb paul
git remote rm paul

获取数据:
现在pb/master可以在本地访问了,你可以合并到自己的某个分支,或者切换到这个分支看看有什么有趣的更新

git pull 抓取数据合并到工作目录中当前分支

推送数据:

git push [remote-name] [branch-name] //默认为 git push origin master

git push origin serverfix //推送分支,其实是下边一句的简化,提取我的 serverfix 并更新到远程仓库的 serverfix

git push origin serverfix:serferfix

git push origin :serverfix //这个语法用于删除,只要把分号前留空

14)其他:

git gc //垃圾回收,每隔一段时间例如一个月运行一次可以减少磁盘占用空间。
git reflog //最后的保障,列出误删的东东
git bisect //二分查找,版本控制之道p124页,略

归档版本库,导出压缩包:

git archive —format=格式 —prefix=目录/ 版本>压缩包.zip
git archive —format=zip head>test.zip
git archive —format=tar —prefix=mysite-1.0/ 1.0 | gzip>mysite-1.0.tar.gz
git archive —format=zip —prefix=mysite-1.0/ 1.0 >mysie-1.0.zip

通过git pull更新仓库,使用git init-db初始化自己的仓库。

commit:

git commit -a -e 提交全部修改文件,并调用vim编辑提交日志。
git reset HEAD^ or
git reset HEAD~1 撤销最后一次提交。
git reset --hard HEAD^ 撤销最后一次提交并清除本地修改。
git reset SHA1 回到SHA1对应的提交状态。

add/delete/ls:

git add -a 添加所有文件。除了.gitignore文件中的文件。
git rm file 从git仓库中删除文件。
git commit 添加或是删除后要提交。

git ls-files -m 显示修改过的文件。
git ls-files 显示所有仓库中的文件。

這些事情都可以先在本地開 local branch 做,而不需要立即 Push 分享給別人。

git branch name 建立本地 local branch
git branch -m old_name new_name 改名字 (如果有同名會失敗,改用 -M 可以強制覆蓋)
git branch 列出目前有那些 branch 以及目前在那個 branch
git checkout name 切換 branch (注意到如果你有檔案修改了卻還沒 commit,會不能切換 branch,解法稍後會談)
git checkout -b name 本地建立 branch 並立即 checkout 切換過去
git branch -d name 刪除 local branch

git merge name 合併另一個 branch,若沒有 conflict 衝突會直接 commit。若需要解決衝突則會再多一個 commit。
git merge --squash <branch_name> 將另一個 branch 的 commit 合併為一筆,特別適合需要做實驗的 fixes bug 或 new feature,最後只留結果。合併完不會幫你先 commit。
git cherry-pick 321d76f 只合併特定其中一個 commit。如果要合併多個,可以加上 -n 指令就不會先幫你 commit,這樣可以多 pick幾個要合併的 commit,最後再 git commit 即可。

查看 分支版本

git branch -a

除了master之外,我们还可以随便创建分支,然后push到服务器上去。

$ git add .
$ git commit -m ""
$ git pull origin camp

$: git push origin camp

远程分支和本地分支需要区分,所以,在从服务器上拉取特定分支的时候,需要指定本地分支名字。

$: git branch product origin/product

更新分支到本地
$: git pull origin camp

Git 教程
1.创建dev分支,并切换到dev分支:git checkout -b dev,相当于以下两条命令的结合:a.创建dev分支:git branch dev b.切换到dev分支:git checkout dev
2.查看当前分支:git banch 注意当前分支前面有一个* 3.合并某分支到当前分支,将dev的分支的工作成果合并到master分支上:git merge dev
4.删除分支:git branch -d dev
5.查看分支合并图:git log --graph
6.git merge --no-ff -m ‘aaa’ dev :将dev合并到当前分支,--no-ff:表示禁用Fast forward.
7.git stash 储存当前现场。
Bug修复的情况
8.如果是master分支上有bug,需要从master创建临时分支。切换到master分支:git checkout master 创建并切换到aaa 分支git checkout -b aaa 修改完成后,切换到master分支,并完成合并,最后删除aaa分支:(切换)git checkout master (合并)git merge --no-ff -m ‘sss’ aaa (删除)git branch -d aaa 然后回到正在操作的dev 分支 接着干活:git checkout dev
9.查看之前保存的工作现场:git stash list
10.恢复工作现场两种办法:a.git stash apply,但是恢复后,stash内容并不删除,需要用git stash drop 来删除;另一种方式是:git stash pop,恢复的同时把stash内容也删了。
11.恢复到指定的stash:git stash apply stash@{0},其中stash@{0}是git stash list 的结果中的头部。
小结:修复bug时,我们是先通过创建新的bug分支进行修复,然后合并,最后删除。当手头工作还没有完成时,先把手头工作现场git stash一下,然后再去修改bug,修复后 在git stash pop,回到工作现场。
新开发的新功能
11.开发一个新功能feature-bbb:feature分支:git checkout -b feature-bbb 开发完毕并提交后,切回到dev,准备合并:git checkout dev 没有合并,要强行删除:git banch -D eature-bbb

小结:开发一个新的feature,最好创建一个分支;如果要丢弃一个没有被合并过的分支,要强行删除:git branch -D name
多人协作
12.当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。查看远程库的信息:git remote 查看远程库的详细信息:git remote -v
13.推送分支:就是git push origin master
14.抓取分支:创建远程origin的dev到本地:git checkout -bdev origin/dev 现在可以再dev上继续修改,然后时不时地把dev分支到push到远程:git commit -m ‘aaa’ git push origin dev

  1. 因此,多人协作的工作模式通常是这样:
    1.首先,可以试图用git push origin branch-name推送自己的修改;
    2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
    3.如果合并有冲突,则解决冲突,并在本地提交;
    4.没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
    如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream 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,如果有冲突,要先处理冲突。
    撤销修改
    16.如果你做的修改没有放在暂存区(即没有git add .)git checkout --file:就是讲在file文件中的所有操作都撤销。有两种情况:y一种是file自修改后还没有被方法哦暂存区,现在,撤销修改就回到和版本库一模一样的状态;一种是file已经添加到暂存区后,又做了修改。现在,撤销修改就回到添加到暂存后的状态。总之,就是让这个文件回到最近一次git commit或git add 时的状态。
    17.查看file文件的内容:cat file
    18.如果现在你要修改的内容已经在暂存区(即你应经git add . 了),但是还没有提交的话,要撤销上次操作:git reset HEAD file.git reset 可以回退版本,也可以把暂存区的修改回到工作区。当我们使用HEAD时,表示最新版本。然后撤销工作区的修改:git checkout --file。

让本地dev分支与远程dev分支关联
git checkout -b dev origin/dev 关联后,就可以直接 git pull或 git push,不用指定分支