git 学习记录
1、git init :初始化所在目录为git仓库(在这个目录里,可以理解为一个虚拟的空间,.git文件隐藏存在,);假如所在目录为gitOne
2、git add fileName:(如果)gitOne文件夹里存在fileName这个文件,就把它添加到这个仓库的缓存区(index);
$ git add . # 将所有修改添加到暂存区
$ git add * # Ant风格添加修改
$ git add *Controller # 将以Controller结尾的文件的所有修改添加到暂存区
$ git add Hello* # 将所有以Hello开头的文件的修改添加到暂存区 例如:HelloWorld.txt,Hello.java,HelloGit.txt ...
$ git add Hello? # 将以Hello开头后面只有一位的文件的修改提交到暂存区 例如:Hello1.txt,HelloA.java 如果是HelloGit.txt或者Hello.java是不会被添加的
3、git commit -m "提交说明信息(比如提交了什么文件和版本)":将所有add 到缓存区(index)的修改,commit(提交)到本地的仓库主干。(可以这么理解,如果只是单纯的复制一个test.txt文件到gitOne文件夹里,这个文件和它所在的目录的git仓库并没有产生联系,通过add 和commit 来将你把它加入到这个文件夹的操作记录下来,并在git仓库里记录这次添加记录,使test.txt和gitOne在git仓库里产生联系,其他人使用git工具来拉你的代码的时候,就知道需要checkout那些文件,也只会checkout有关联的文件,在git虚拟仓库里存在关联信息的文件)
4、git log:查看历史提交信息
5、git status:查看当前的缓存区(index)的状态,有没有add了以后没commit的文件,或者add后做了修改没重新add的文件。
6、git reset --hard HEAD^ :回退到上一个commit的版本,git reset --hard 12345:(12345是commit的ID,可以使用git reflog 来查看历史的执行有效命令的信息,有每次commit的id信息)
7、git checkout -- fileName:当你修改错了某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- fileName;当你已经add了修改文件,将修改信息添加到了缓存区(index),就需要git reset HEAD fileName 来回退到add之前(文件还是已修改)然后git checkout -- fileName 来丢弃修改,如果是已经commit 的,只能使用上一条的版本回退命令来回退了(前提是没有push到远程仓库);
8、关联远程仓库:要关联一个远程库,将本地仓库推送到远程仓库,使用命令git remote add origin git@server-name:path/repo-name.git;关联后,使用命令git push -u origin master第一次推送 master 分支的所有内容;此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
9、clone仓库到本地:如果是我们新加入一个开发团队或对开源的一些项目做出开发支持,需要使用git clone address(远程仓库地址)来从远程仓库(团队已创建好的)clone一个到本地,默认目录名为远程仓库名;git clone address(远程仓库地址) fileName(本地文件夹名字):创建本地目录fileName,并克隆远程仓库到里边;
10、git push与git pull是一对推送/拉取分支的git命令。
git push 使用本地的对应分支来更新对应的远程分支:
$ git push <远程主机名> <本地分支名>:<远程分支名>
git pull获取并合并其他的厂库,或者本地的其他分支:
$ git pull <远程主机> <远程分支>:<本地分支>
11、创建并指向这个分支:$ git checkout -b dev创建dev分支,并checkout指向这个分支,仓库当前有效HEAD会指向这个分支(即执行git命令时所操作的对象),等于执行了两条命令:
$ git branch dev ***创建分支'dev'***
$ git checkout dev ***'checkout'指向'dev'分支***
$ git branch查看当前仓库所有分支;git branch -a查看远程和本地所有分支
* dev ***当前仓库`HEAD`所指向的分支前会有'*'字符***
master ***clone下来,一般默认分支为'master'***
12、分支的合并:$ git checkout branchName可以切换回branchName分支;git merge branchName命令用于合并branchName到当前分支(当前仓库所操作的分支),如:当前分支为master,将dev分支 合并 到master(当前分支)中
$ git checkout master
$ git merge dev
合并后,可以使用$ git branch -d dev删除本地dev分支;
13、查看远程库信息,使用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,如果有冲突,要先处理冲突。
14、git pull失败的时候:
提示Please, commit your changes or stash them before you can merge.错误,是因为本地有未提交的修改,本地内容和上一次commit-push内容不一致,解决办法有两种:
1).使用stash将未提交的修改放到暂存区,等pull更新后,再拿出来:
git stash
git pull
git stash pop
接下来git diff一下此文件看看自动合并的情况,并作出相应修改。
git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。
2).放弃此次本地的不同修改,将工作区恢复到之前某次commit时的版本号(可参考上边第六条说明,以下命令为直接回退到上次提交的版本,也可以指定到某一个版本):
git reset --hard
git pull