为什么是用git
离线工作,比如在客户现场修正的代码,能够进行本地版本管理,然后合并到中央共享repository中 优秀的分支管理,特别有利于变更比较多的场合,或者新机能比较多的情况。 可以把当前的作业暂存,进行bug的修正,然后取出暂存内容继续工作(工作进度保存) 速度快,创建分支,提交代码,checkout代码等 |
查看某处提交的文件列表
先确定提交的Hash值 git log -s 确定出要查询的提交的ID和前一次提交的id,执行diff命令查看提交的文件 git diff --name-only beforeid..queryid 查询最近一次提交的文件内容 git diff --name-only commit_id..HEAD 查看删除的文件(added:A,Copied:C,Deleted:D,Modified:M,Renamed:R) git diff --name-only --diff-filter=D v3.1.0.201310021548-r..HEAD |
添加文件到stage
git add -u 将所有修改过的文件添加到stage,批量添加 git add -A 把所有修改过的,新追加的,删除的都添加到Stage |
git ssh url:
git clone gituser@192.168.0.103:reponame.git
使用Git之前,先配置以下两个内容
git config --global user.name "username" git config --global user.email "email" git config --global color.ui true |
git log
git log --graph --pretty=oneline --abbrev-commit
撤销修改的方式
1)撤销工作目录中的内容,就是放弃自上次add到staging以后,在工作目录下修改的内容。
可以使用git checkout和git reset命令实现。
checkout的实现方式(单个文件?)
1)用stage中的内容覆盖工作区中的内容
git checkout -- a.txt
(注意:如果stage中有a.txt,则用stage中的文件覆盖工作区中的文件,否则用history中的内容覆盖,优先级)
2)用history中的内容覆盖工作区中的内容(同时,stage中的内容也会被覆盖,保持一致,递归更新)
git checkout HEAD a.txt
git reset的实现方式 (方便的方式只有一种)
1)用history中的内容覆盖工作区中的内容,stage中的内容也会被清空,3个地方保持一致[被跟踪文件]
git reset --hard HEAD
如果要保存工作区和history中的内容完全一致,执行git clean -f
总结:
保持working,stage,history中一致的方法
1)git checkout HEAD a.txt
2) git reset --hard HEAD a.txt
用history中的内容覆盖Stage中的内容,不影响工作区的内容
git reset HEAD files
撤销提交的内容?
有两种方式,git reset和git revert
1)git reset HEAD~1 (把HEAD指针指向前次的提交,放弃当前的提交,尽量不要在public repository使用,会导致不一致)
2)git revert <commit-id> ,其中commit-id就是要被放弃的commit-id
3)修改提交的内容
git commit -amend
git的branch操作
查看分支: 创建分支: 基于某个commit上创建分支:git branch <name> <commit_id> 切换分支: 创建+切换分支: git checkout -b <name> <commit_id> 合并某分支到当前分支: 删除分支: |
git branch 显示当前repository中的分支列表
创建新的分支并切换到dev分支
git branch dev
git checkout dev
两命令等价下面的一个命令
git checkout -b dev
删除分支
git branch -d <name>
git branch -D <name> [强制删除]
Checkout分支
git checkout <branch>
技巧方法:
一次添加多个文件到stage,然后排出个别文件 git add *.java git reset HEAD rm.java |
git diff:是查看working tree与index file的差别的。 git diff --cached:是查看index file与commit的差别的。 git diff HEAD:是查看working tree和commit的差别的 |
添加远程仓库
列举当前本地repository关联的远程repository git remote -v git branch -r 添加远程repository git remote add origin git@github.com:youraccount/reposigory.git 删除对远程仓库的引用 git remote rm origin 获取远程仓库的master分支的内容(origin代表远程仓库,master代表获取的分支 git pull origin master (先更新,再推送) git push -u origin master 在本地创建dev分支,并关联远程dev分支(或创建?)
|
在工作区中的文件,如果初始时未加入到任何一个分支中,则到在某个分支中提交后,则另外的分支中就看不到这个文件了。如果有未提交的文件(包括stage),则未提交的内容在各个分支的状态保持一致
在一个分支上保留当前的工作,切换到其他的分支进行作业,作业完后,返回当前分支,取出缓存的工作,继续。。
1)在dev分支上开发,暂存dev的working,stage中的内容。
git stash
2)切换到master分支,创建but修复分支,修复bug,合并到master
git checkout master
git checkout -b fix101
git checkout master
git merge --no-ff -m 'fix bug 101' fix101
3)切换到dev分支,取出缓存的作用,继续后面的工作
git checkout dev
git stash pop
git stash list
备注:引用了廖老大的内容,主要是为了自己使用时能集中参考 多人协作的工作模式通常是这样:
如果 |
git标签
|