git 知识总结

 

一、添加文件到Git仓库,分两步:
1.第一步,使用命令git add <file>,注意,可反复多次使用,添加多个文件;
2.第二步,使用命令git commit,完成。
二、要随时掌握工作区的状态,使用git status命令。
如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
三、时光穿梭
1.HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
2.穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
3.要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
四、Git跟踪并管理的是修改,而非文件
1.git diff HEAD a.txt   查看文件的修改   git diff HEAD~3  ; git diff  <版本号,前6位>
2.
五.撤销修改
1.git checkout — a.txt
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commitgit add时的状态。
备注:也就是说,用了checkout —  命令后 , 编辑,git add后编辑或者git commit后编辑后的内容,将失效,回到前一次操作的状态
2.用命令git reset HEAD file可以把暂存区的修改撤销掉(unstage)
3.git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
4.丢弃工作区的修改  git checkout   a.txt
git reset HEAD a.txt    只是把暂存区的文件取出来,不会修改文件  commit 后,就不行了commit  后就用时光机吧
5.当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
6.当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
六、git reset 回退某一个版本  git revert  回退某一个版本生成一个新的commit
七、穿件分支和合并分支
1.查看分支:git branch
2.创建分支:git branch <name>
3.切换分支:git checkout <name>
4.创建+切换分支:git checkout -b <name>
5.合并某分支到当前分支:git merge <name>
6.删除分支:git branch -d <name>
八、解决冲突
1.当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
2.git log --graph  查看分支合并图
3.git 可以帮你合并一些简单,当修改的同一个地方,无法解决的时候,就需要手动解决冲突问题了
九、bug修复
1.stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作;
2.git stash list命令看看stash记录
3.git stash apply 或者多个stash  用git stash apply stash@{1} 来恢复
4.stash用git stash drop来删除;git stash pop,恢复的同时把stash内容也删了;
十、小技巧
1.开发一个新feature,最好新建一个分支;
2.如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
十一、多人协作
1.首先,可以试图用git push origin branch-name推送自己的修改;
2.如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
3.如果合并有冲突,则解决冲突,并在本地提交;
4.没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
5.如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name
备注:1.查看远程库信息,使用git remote -v
2.本地新建的分支如果不推送到远程,对其他人就是不可见的;
3.从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
4.在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
5.建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
6.从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
十二、标签
1.命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
2.git tag -a <tagname> -m "blablabla..."可以指定标签信息;
3.git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
4.命令git tag可以查看所有标签。
5.git show <tagname>  查看标签的详细信息
操作标签:
1.命令git push origin <tagname>可以推送一个本地标签;
2.命令git push origin --tags可以推送全部未推送过的本地标签;
3.命令git tag -d <tagname>可以删除一个本地标签;
4.命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
十三、忽略文件
1.忽略某些文件时,需要编写.gitignore
2.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
3.所有配置文件可以直接在线浏览:https://github.com/github/gitignore
备注:对已经进入版本库的文件无效,除非删除版本库的内容,才能起作用
十四、配置别名
1.git st就表示git status   配置git config --global alias.st status  其他的类似
2.git checkout   :git config --global alias.co checkout
3.查看配置 git config --list 本地仓库;git config --global --list  查看全局的仓库配置
4.git last 查看最后一条commit
5.

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

 

总结一些比较好用的指令
1.谁动了我的奶酪   git blame a.txt
2.git log  –onelime  –graph     显示log
3.git reflog 列出历史操作的log;  git fsck --lost-found 这个更厉害
4.git grep  搜索内容

更多详细指令介绍参看链接:http://blog.xiaofangmoon.com/?p=21

发表评论