基本操作
一、初始化仓库:
git init 初始化仓库
初始化成功后会生成一个.git文件,存储着管理当前目录内容所需的仓库数据。Git中称之为“附属于该仓库的工作树”,文件的编辑等操作在工作树中进行,然后记录到仓库中。
二、查看状态:
git status查看仓库当前状态,处于什么分支下
三、添加至暂存区:
git add
git add – –all
git add filename
向暂存区添加文件
如果只在git仓库的工作树创建文件,是不会被记录在git仓库的版本管理对象的,当用git status查看时文件会显示在untracked files中。执行git add后会加入暂存区,才能成为git仓库的管理对象。
四、提交:
git commit
git commit保存仓库的历史记录。将暂存区的文件保存到历史记录,通过记录可以在工作树中恢复文件。git commit -m “description message”。commit之后会生成一个对应于本次提交的哈希值,git的其他命令指向提交时会用到哈希值。
五、日志:
git log 查看提交日志
git log详细信息
git log – –pretty=short显示提交消息的第一行
git log filename 指定文件的日志
git log -p显示文件的改动
git log -p filename指定文件的改动
git log –graph以图表形式查看分支
六、查看差别:
git diff查看更改前后的差别(工作树与暂存区的差别)
git diff HEAD暂存区与最新一次提交的差别
推荐:
在commit之前先diff HEAD一下确认差别,commit之后log确认提价成功。
七、分支操作
查看分支:
git branch显示所有分支
带*的是当前分支
创建分支:
git checkout -b newbranch
创建新分支名为newbranch并切换当前分支到新分支
git branch newbranch
git checkout newbranch
这两条命令等同于上面的一条命令
git checkout -
切换回上一个命令
同:git checkout newbranch
合并分支:
git merge 合并分支(将a分支合并到a的父分支,首先要切换到父分支,再git merge)
git checkout master
git merge – –no– –ff newbranch
– –no– –ff是创建合并提交并在历史中记录
git log – –graph以图表形式查看分支
八、回溯版本和冲突:
git reset 回溯历史版本
要让仓库的HEAD(HEAD是指向当前分支的最新一次提交的指针)、暂存区、当前工作树回溯到指定状态,需要用(git reset –hard 目标时间点的哈希值)命令。
回溯到newbranch创建之前,此时相当于没有newbranch,filename文件也没被修改。
此时再创建一个newbranch2,修改filename,然后将newbranch2的filename 加入到暂存区中。
推进至newbranch分支合并后的状态。
git log只能查看以当前状态为终点的历史日志,,所以要用git reflog命令查看当前仓库的操作日志,
找出日志回溯前的哈希值,然后git reset –hard 哈希值,恢复到newbranch分支合并后的状态。
再合并newbranch2分支到主分支
git merge –no–ff newbranch2
此时发生冲突conflict
打开filename文件,会发现HEAD的内容和newbranch2 的内容,进行处理,比如删除一个或都留下,之后
才能合并。
之后在主分支add和commit,保存至历史记录。
git commit -am “description message”相对于合并add命令和commit两条命令。
九、更改历史
有时候会有一些小的修改,比如改了一个单词等,但修改就会有提交。然而在历史记录中,我们不需要看到此类无用的提交记录,为此用到了更改历史的命令:
git rebase -i HEAD~2
用git rebase,选定当前分支中包含HEAD(最新提交)在内的两个最新的历史记录为对象,并在编辑器中打开。
形式如下:
pick 哈希值 最新第二次提交的描述
pick 哈希值 最新第一次提交的描述
修改方法:
将最新第一次提交记录的pick改为fixup,保存并关闭即可。
十、推送至远程仓库:
在github上创建一个仓库,不要勾选Initialize ……的选项,否则会自动生成readme,创建之初就与本地仓库失去了整合性,虽然之后会强制覆盖,但还是不要麻烦了。
添加远程仓库:
git remote add origin git@github.com:用户名/仓库名.git
执行之后,Git自动将git@github.com:用户名/仓库名.git远程仓库的名字改为origin(标识符)
推送至远程仓库
git push -u origin gitbranchname
推送至远程仓库gitbranchname分支,可以是master分支,也可以是其他分支,如果远程仓库没有gitbranchname,会自动创建。
-u表示在推送的时候将gitbranchname分支作为本地仓库当前分支的上游(upstream),添了这个参数,将来在运行git pull从远程仓库获取内容时,本地仓库的这个分支就可以直接从origin的gitbranchname分支获取内容,省去另外添加参数的麻烦。
从远程仓库获取
git clone url
git clone后默认处于master分支,同时系统将自动设置origin为该远程仓库的标识符。
获取远程仓库的newb分支:
git checkout -b newb origin/newb
创建远程仓库newb分支的同名本地分支(也可以不同名),就是说origin/newb是本地newb分支的获取来源。修改之后,执行git add 和git commit ,最后执行git push,就将修改推送至远程的newb分支中。
git pull获取最新的远程仓库分支
如果本地的A分支未提交,远程的与之对应的S分支就有了最新的提交,执行 git pull origin S将本地的A分支更新到最新状态