http://blog.csdn.net/crylearner/article/details/7685022
仓库创建
1. 本地新建一个git仓库
git --bare init
如果是需要作为服务器仓库的,推荐加—bare,否则以后其他仓库push代码到此仓库时会有一些麻烦。
具体可以参考:http://hi.baidu.com/mengdaant/item/62dc182908bf25f950fd87ff
添加文件
git add . // add all
git add \\*.txt // add all txt file
添加文件后,直接git commit就完成了仓库创建。
2. 本地克隆一个远程仓库
2.1 克隆远程仓库
git clone <name> <url> <directory>
这里,name可以不写,默认origin
directory也可以不写,默认使用远程git一样的根目录名。
2.2 添加远程仓库
git remoteadd <name> <url>
name可以任意取。 url必须是确实存在的git仓库。
3. 同步远程仓库代码到本地
git pull <name>
如果pull时提示“You asked me to pull without telling me whichbranch you want to merge with”,
说明本地有新建分支且已同步到服务器上,当从服务器下载代码时需要在本地config中配置该分支的merge信息。
配置时可以参考下面的例子:
$ git config branch.master.remote origin //master是分支名,origin是远程仓库名
$ git config branch.master.merge refs/heads/master
具体可参考http://hubingforever.blog.163.com/blog/static/171040579201232184549211/
4. 同步本地代码到远程仓库
git push <remote name> <branchname>
如果push时提示“ refusing to update checked out branch:refs/heads/master”,说明远程仓库创建是没有使用—bare选项。
解决这个冲突需要远程仓库管理员:
具体可以是将远程仓库当前分支切换到其他分支(如谁也不会使用的分支),
或者按照提示内容,设置denyCurrentBranch = ignore。
具体可参考http://hi.baidu.com/mengdaant/item/62dc182908bf25f950fd87ff
代码提交
代码提交一般有五个步骤:
1.查看目前代码的修改状态
2.查看代码修改内容
3.暂存需要提交的文件
4.提交已暂存的文件
5.同步到服务器
1. 查看目前代码的修改状态
提交代码之前,首先应该检查目前所做的修改,运行git status命令
a) 已暂存 (changes to be committed)
new file //表示新建文件
modified //表示修改文件
deleted //表示删除文件
b) 已修改 (changed but not updated)
modified //表示修改文件
deleted //表示删除文件
另外,git 给出了可能需要的操作命令,git add/rm, gitcheckout --
c) 未跟踪 (untracked files)
2. 查看代码修改的内容
git diff <file>
比较某文件与最近提交节点的差异。
注意:如果该文件已暂存,那么应该使用git diff –cached<file>
git diff <hashcode> <hashcode> <file>
比较某文件在提交节点a,节点b的差异。
技巧:如果省略后面一个hashcode,则默认表示与上一提交节点比较。(也可以利用^运算符)
3. 暂存需要提交的文件
如果是新建的文件
则git add <file>
如果是修改的文件
则git add <file>
如果是删除的文件
则 git rm <file>
4. 提交已暂存的文件
git commit
注意注释填写规范。
git commit --amend
修改最近一次提交。有时候如果提交注释书写有误或者漏提文件,可以使用此命令。
5. 同步到服务器
同步到服务器前先需要将服务器代码同步到本地
命令: git pull
如果执行失败,就按照提示还原有冲突的文件,然后再次尝试同步。
命令:git checkout -- <有冲突的文件路径>
同步到服务器
命令: git push origin <本地分支名>
如果执行失败,一般是没有将服务器代码同步到本地导致的,先执行上面的git pull命令
提交记录查询
git log --author=””
查询某人的提交记录
git log <file>
查询某文件的提交记录
一般可以借助可视化工具,如gitk,tortoiseGit,
git whatchanged 查看具体哪些文件有改动
应该要注意的是不论git log 或 git whatchanged, 显示出来的节点顺序,不是绝对按时间顺序排列的,这点在遇到分支合并节点的时候一定要小心。
建议log的查看使用可视化工具。
1. 回退已提交的代码
git reset --hard HEAD
回退整套代码到最近一次提后的状态。
参数 --hard 表示删除自该次提交后所有的修改记录(未跟踪文件除外)。如果需要保留目前的修改,则执行git reset -- soft HEAD。
git reset --hard <hashcode>
回退代码到指定的某次提交状态。(hashcode是该次提交的哈希码)。同样,参数hard同上。
git没有办法回退单个文件到某次提交状态。如果确实需要这么做,那么应该先取得某次提交时该文件的内容,然后覆盖现有的这个文件。
2. 撤消已暂存的文件
git reset HEAD <文件路径>
3. 撤消已修改的文件
git checkout -- <文件路径>
4. 撤消未跟踪文件
rm <文件或文件夹路径>
如果加上参数-rf,那么表示删除文件夹内所有子文件。
git clean -dxf
清除所有未跟踪文件,包括纳入ignored的文件。
如果要保留ignored的文件修改,使用参数-df
应用标签
1. 查看标签
git tag –l<name> , <name>支持通配符
2. 新建标签
git tag –a<name> -m <detail message>
如果是需要给某个历史提交节点打标签,则加上对应hashcode即可
3. 删除标签
git tag –d<name>
4. 提交标签
git push origin<分支名><tag name>
5. 恢复代码到某个标签点
git show<tagname> 由此得到对应的提交哈希值,然后git reset 回退代码
基本配置
1. 给Git着色
git config color.ui true
2. 设置文本编译器
git config core.editor XXX
如果是需要配置为notepad,
则core.editor='D:/Progra~1/Notepad++/notepad++.exe'-multiInst -notabbar -nosession –noPlugin
3. 设置比较工具和合并工具
git config diff.tool XXX
git config merge.tool XXX
使用时,如果直接 gitdiff命令无效,可以尝试gitdifftool 和 gitmergetool
使用beyondcompare做默认比较和合并工具,
可以参考官网说明http://www.scootersoftware.com/support.php?zz=kb_vcs
分支管理
1. 克隆代码
git clone <代码仓库路径>
2. 创建本地工作分支
git checkout -b <newbranch>
创建并切换到新分支。
如果是从远程分支创建一个本地同名分支,则git checkout -b <branchname> <origin/branchname>
git branch <newbranch>
创建新分支,但不切换过去
3. 删除分支
git branch -D <branch>
强制删除分支,即使该分支上有未提交的内容。(没有-D参数时,只有当该分支没有未提交内容时才可以删除)
4. 切换分支
git checkout <otherbranch>
Note: 分支记录的是committed的内容,所以所有未提交的修改不同分支中都是共享的,也就是都能看到。
git stash
将分支上所有修改内容暂时保存起来。有时候工作进行到一半,需要切换到另一个分支,但是这时候又不适合提交,可以使用git stash暂时保存修改的内容,回头在利用git stash apply恢复原先的工作内容。
5. 合并分支
git merge --no-commit
git commit
这样做而不直接merge的目的是迎合代码提交规范的需要,使可以填写分支合并信息。