目录
一、开局一个远程仓
1.1 本地安装Git
下载地址: https://gitforwindows.org/
安装完成后,有Git GUI, Git bash, Git CMD;其实我们使用的是git bash,命令行工具黑乎乎的窗口
看看你的版本
git --version
1.2 配置一番
$ git config --global user.name "xxx"
$ git config --global user.email "xxxxxx.com" //这里要和你远程仓使用的邮箱一致
接下来看看你配置好了没:
$ git config user.name
$ git config user.email
$ git config --list
1.3 据为己有
先把它克隆到本地,这个比较简单
git clone git://hellojs-tw/git-101.git //意思一下,没这个git
这时让你输入密码,完事之后在你的文件夹下有个.gt的隐藏文件夹
二、开局一个本地仓
2.1 查看一番
2.10查看我在哪里, 我所在的分支叫什么名字(你可以理解git里面都是分支),我之前都干了啥
git log //查看提交快照
git log --graph //查看分支型历史记录
git log --graph --oneline --decorate --all //分叉历史
git log -(n) //查看最近n次提交记录
2.11查看我之后有哪些分支
git branch --all //查看本地分支列表 ,以及当前所处分支
git remote show origin //查看远程分支列表
2.12我之前做了哪些重要的事
git tag //按照字母顺序列出所有标签
2.13我要去哪里
git checkout master //我要切换到master分支,此时有个Head指针一起过来
/*切到某个提交*/
git checkout commit_id(xxxxxxxxxxxxxxxxx) //切到某个提交
//或者使用
git reset --hard commit_id //退到/进到 指定commit_id
git reset --hard HEAD^ //回到最新的一次提交
//回退
git checkout master
远程仓库名字 “origin” 与分支名字 “master” 一样,在 Git 中并没有任何特别的含义一样,同时“master”是当你运行git init时默认的起始分支名字,原因仅仅是它的广泛使用,“origin” 是当你运行 git clone 时默认的远程仓库名字
(远程仓库名)/(分支名) 这样的形式表示远程分支。
origin 并不是指得是远程的仓库,而是指得是远程仓库在本地的一个指针(这个指针有可能过时的)。当我们使用merge 的时候,我们进行合并的时候只是上一次fetch 从远程拿到的版本。不是远程仓库的最新版本。所以在上库之前记得git reset --hard //重置本地代码,清除所有差异, git pull一下消除远程仓与本地仓的差异,实现同步以避免merge冲突。
理解orgin 或者 orgin/master 这个只是远程仓库在本地仓库的一个指针。我们可以使用 git fetch 命令来进行更新。所以在进行merge 的时候 不要忘了先进行git fetch 进行更新到最新的远程仓库。
什么是合并冲突?
如果两个人同时更改了同一个文件的同一行代码,或者一个人改动了那些被另一个人删除了的代码,Git 就不能简单地确定到底谁的改动才是正确的。这时 Git 会把这些地方标记为一个冲突,你必须首先解决掉这些冲突,然后再继续你的工作。
https://www.git-tower.com/learn/git/ebook/cn/command-line/advanced-topics/merge-conflicts
什么是index?
git add 命令将内容从工作目录添加到暂存区(或称为索引(index)区),以备下次提交;可以理解为暂存区指针。
2.14我来这里干什么
git branch b1 //我创建了一个分支b1
git checkout -b b2 //我新建了分支b2,我来到b2分支了
2.15 我看看我之前有没有动这个工程,动了哪些东西
git status //查看修改了哪些文件,有没有放在暂存区,等待我commit
git status --short //文件状态的简单了解, 最后这些都是你自己修改的文件,以便于用beCompare
git diff //查看没暂存,已经修改的内容
git diff --cached //查看已暂存,待commit的内容
git ls-files //查看暂存文件中的信息
git rm --cached +文件名 //用于将文件移除暂存区
2.2 操作一番
2.21操作流程
先看一下git的工作流程(git-101:https://github.com/hellojs-tw/git-101)
2.22 git pull vs git fetch
git fetch命令与一个远程的仓库交互,并且将远程仓库中有但是在当前仓库的没有的所有信息拉取下来然后
存储在你本地数据库中。
git pull 命令来自动的抓取然后合并远程分支到当前分支。
//git fetch [remote-name] //git fetch只会将本地库所关联的远程库的commit id更新至最新
//-------method 1-------------
git fetch origin master //从远程仓库 抓取master分支,但是不会merge
git log -p master origin/master //比较本地master分支与远程master分支的区别
git merge origin/master //合并远程分支到本地
//-------method 2-------------
git fetch origin master:tmp
git diff tmp
git merge tmp
//-------method 3-------------
//git pull会将本地库更新至远程库的最新状态
git pull origin master//相当于是从远程获取最新版本并merge到本地
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin next:master //取回origin主机的next分支,与本地的master分支合并
git fetch更安全一些,在git merge前,我们可以查看更新情况,然后再决定是否合并。
2.23 git add
git add hello.cpp //将文件添加到暂存区域,以便 git commit
git add *.cpp //特定文件
git add ./* //所有修改文件
git add hello/dir/ //特定文件夹下所有修改
tips: 如果你修改了一个文件,然后git add 上去了,没有进行commit ,过了一段时间后你又一次修改了改文件,git status发现同一个文件出现在未暂存区域和暂存区域。其实git只是暂存了你运行git add命令时的版本,所以当运行了git add之后又作了修订的文件,需要重新运行git add把最新的版本重新暂存起来。
2.24 git commit -m
git commit //自动弹出vim编辑器,添加提交信息
git commit -m "add some advanced features" // 添加提交信息
//------------撤销exam----------
git commit --amend //紧接着git commit之后的话,仅修改提交信息,然后提交
//你提交后发现忘记了暂存某些需要修改的文件
git commit -m 'initial commit'
git add forgotten_file
git commit --amend
当进行commit时,必须要生成一个Change-Id,否则,push到gerrit服务器时,会收到一个错误提醒
2.25 git reset
//取消暂存的文件
git add * //暂存修改的文件
git status //查看修改后的文件
git reset Head <file> //取消已经暂存的内容
//撤销对文件的修改
git add * //暂存修改的文件
git status //查看修改后的文件
git checkout --<file> //在未暂存区撤销之前做的所有修改
git reset HEAD^ //针对那个提交的混合重置,实际上将撤销那次提交并将修改的文件置为未暂存状态
git reset详解:https://www.jianshu.com/p/cbd5cd504f14
2.26 git rm
git rm file //从跟踪清单中删除某个文件
git rm -f file //从暂存区删除某个文件
git rm --cached file //仅从跟踪清单中移除,但是工作区中仍存在
2.27 git tag
//Git 可以给历史中的某个提交打上一个标签,以示重要
git tag v1.4 //轻量级标签,像一个不会改变的分支,只是一个特定提交的引用
//附注标签事git数据库一个完整对象,可以包含打标签者的名字、邮件等
git tag -a v1.4 -m 'author, date,email' //最简单的方式运行tag时加上 -a选项
git show v1.4 //查看标签信息
2.28 git push
git push [remote-name] [branch-name]
git push origin master //将master分支推送到origin服务器
2.29 git push origin HEAD:refs/for/Develop
向远程仓库Develop分支提交代码,并且找人review
这里就需要使用到gerit: https://www.cnblogs.com/chenpingzhao/p/9337117.html , 详情请查看具体攻略。
参考:
git命令大全: http://www.manongjc.com/detail/8-lcxxnqhqhojqqyf.html