git教程
简介:
分布式版本控制系统。客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。
工作区和暂存区
1,windows安装
在http://git-scm.com/download/win,下载。
其他系统另外参考。
2,安装好后,进入该项目目录,执行
$ git init
该命令将创建一个名为 .git
的子目录。通过 git add
命令来实现对指定文件的跟踪,然后执行 git commit
提交:
$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'
另外还可以通过命令 git commit -a -m 'message'或者git commit -am 'message'来一次性提交。
3,查看项目的状态:
$ git status
On branch master
nothing to commit, working directory clean
4,查看提交历史
$ git log
还有其他参数,另外参考。
5,撤销操作
$ git commit --amend
撤销某个文件的提交
git reset HEAD readme.txt
6,分支新建和合并。git鼓励使用分支,创建和使用分支很简单。
git banch test
git checkout test
或者
git checkout -b test
相当于上面两条命令
在分支test上修改,提交后。切换会master:git checkout master,然后把分支test合并到master:
git merge test
合并成功后 ,会提示成功消息。
删除分支。合并到主分支后,就可以删了分支。
git branch -d test
7,克隆远程仓库
git clone https://github.com/schacon/ticgit
7.1 添加远程仓库:
a,本地创建Git仓库:
b,github创建同名仓库:
c,本地git bash 运行
git remote add origin git@github.com:hannibal2017/testGit.git
d、推送到远程
git push origin master
$ git push origin master
Counting objects: 32, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (17/17), done.
Writing objects: 100% (32/32), 2.41 KiB | 0 bytes/s, done.
Total 32 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To git@github.com:hannibal2017/testGit.git
* [new branch] master -> master
GitHub这时候就会出现本地有的文件
另一个例子,截图如下
7.2 git推送分支到GitHub
7.2.1,在Git创建分支:
git checkout -b helloSpring_annotation
7.2.2,推动到GitHub
git push origin HEAD -u
7.2.3,提交到本地仓库
git commit -am 'update project for annotation'
7.2.4,推动到Github的分支
git push origin helloSpring_annotation
GitHub上查看,已经推动成功。
8,图形化界面操作。
$ git gui
会出现一个图形化界面,操作方便。
8,reset
8.1 如果修改文件后,还未commit,运行
git checkout -- fileName
8.2 如果已经commit,运行
git reset HEAD~1
表示回退到上一个版本。
然后再运行8.1,这样修改就撤销了。
9,git pull失败
Pull is not possible because you have unmerged files.
本地的push和merge会形成MERGE-HEAD(FETCH-HEAD), HEAD(PUSH-HEAD)这样的引用。HEAD代表本地最近成功push后形成的引用。MERGE-HEAD表示成功pull后形成的引用。可以通过MERGE-HEAD或者HEAD来实现类型与svn revet的效果。
解决:
1.将本地的冲突文件冲掉,不仅需要reset到MERGE-HEAD或者HEAD,还需要--hard。没有后面的hard,不会冲掉本地工作区。只会冲掉stage区。
git reset --hard FETCH_HEAD
2.git pull就会成功。
10 地址获取和修改
获取:git remote -v
修改: git remote set-url origin "新地址"