Git的使用

本文详细介绍了Git的基础使用方法,包括版本管理、分支管理、远程仓库操作、撤销修改及提交等内容。通过实例演示,帮助开发者高效掌握Git的实用技能。

廖雪峰的博客

Git基础

为什么是用git

离线工作,比如在客户现场修正的代码,能够进行本地版本管理,然后合并到中央共享repository中

优秀的分支管理,特别有利于变更比较多的场合,或者新机能比较多的情况。

可以把当前的作业暂存,进行bug的修正,然后取出暂存内容继续工作(工作进度保存)

速度快,创建分支,提交代码,checkout代码等

查看某处提交的文件列表

先确定提交的Hash值

git log -s

确定出要查询的提交的ID和前一次提交的id,执行diff命令查看提交的文件

git diff --name-only   beforeid..queryid

查询最近一次提交的文件内容

git diff --name-only  commit_id..HEAD

查看删除的文件(added:A,Copied:C,Deleted:D,Modified:M,Renamed:R)

git diff --name-only --diff-filter=D v3.1.0.201310021548-r..HEAD


添加文件到stage

git add -u     将所有修改过的文件添加到stage,批量添加

git add -A    把所有修改过的,新追加的,删除的都添加到Stage

git ssh url:

git clone gituser@192.168.0.103:reponame.git


使用Git之前,先配置以下两个内容

git config --global user.name "username"

git config --global user.email "email"

git config --global color.ui true

git log

git log --graph --pretty=oneline --abbrev-commit


撤销修改的方式

1)撤销工作目录中的内容,就是放弃自上次add到staging以后,在工作目录下修改的内容。

可以使用git checkout和git reset命令实现。

checkout的实现方式(单个文件?)

1)用stage中的内容覆盖工作区中的内容

git checkout -- a.txt    

(注意:如果stage中有a.txt,则用stage中的文件覆盖工作区中的文件,否则用history中的内容覆盖,优先级)

2)用history中的内容覆盖工作区中的内容(同时,stage中的内容也会被覆盖,保持一致,递归更新)

git checkout HEAD a.txt


git reset的实现方式 (方便的方式只有一种)

1)用history中的内容覆盖工作区中的内容,stage中的内容也会被清空,3个地方保持一致[被跟踪文件]

    git reset --hard HEAD   

     如果要保存工作区和history中的内容完全一致,执行git clean -f

总结:

    保持working,stage,history中一致的方法

    1)git checkout HEAD a.txt

     2) git reset --hard HEAD a.txt


用history中的内容覆盖Stage中的内容,不影响工作区的内容

git reset  HEAD files 


撤销提交的内容?

有两种方式,git reset和git revert

1)git reset HEAD~1   (把HEAD指针指向前次的提交,放弃当前的提交,尽量不要在public repository使用,会导致不一致)

2)git revert <commit-id> ,其中commit-id就是要被放弃的commit-id

3)修改提交的内容

     git commit -amend


git的branch操作

查看分支:git branch

创建分支:git branch <name>

基于某个commit上创建分支:git branch <name> <commit_id>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

git checkout -b <name> <commit_id>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

git branch  显示当前repository中的分支列表

创建新的分支并切换到dev分支

git branch dev

git checkout dev

两命令等价下面的一个命令

git checkout -b dev

删除分支

git branch -d  <name>

git branch -D <name>  [强制删除]

Checkout分支

git checkout <branch>

技巧方法:

一次添加多个文件到stage,然后排出个别文件

git add *.java

git reset HEAD rm.java

git diff:是查看working tree与index file的差别的。 git diff --cached:是查看index file与commit的差别的。 git diff HEAD:是查看working tree和commit的差别的


添加远程仓库

列举当前本地repository关联的远程repository

git remote -v

git branch -r

添加远程repository

git remote add origin git@github.com:youraccount/reposigory.git

删除对远程仓库的引用

git remote rm origin

获取远程仓库的master分支的内容(origin代表远程仓库,master代表获取的分支

git pull origin master  (先更新,再推送)

git push -u origin master


在本地创建dev分支,并关联远程dev分支(或创建?)

如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,那么可以这么做。


$ git push origin test:test           // 提交本地test分支作为远程的test分支
(test:test左边的为本地分支,右边为远程分支)
$ git branch --set-upstream-to=origin/test  //本地分支和远程分支进行关联处理

如果想删除远程的分支呢?类似于上面,如果:左边的分支为空,那么将删除:右边的远程的分支。

$ git push origin :test              // 刚提交到远程的test将被删除,但是本地还会保存的,不用担心
git checkout -b dev origin/dev
git branch --set-upstream-to=origin/dev

获取远程仓库的特定分支(本地已经有别的分支,但没有服务器上的分支,不会覆盖本地的其他分支)
git fetch origin uat
git checkout uat


在工作区中的文件,如果初始时未加入到任何一个分支中,则到在某个分支中提交后,则另外的分支中就看不到这个文件了。如果有未提交的文件(包括stage),则未提交的内容在各个分支的状态保持一致


在一个分支上保留当前的工作,切换到其他的分支进行作业,作业完后,返回当前分支,取出缓存的工作,继续。。

1)在dev分支上开发,暂存dev的working,stage中的内容。

git stash

2)切换到master分支,创建but修复分支,修复bug,合并到master

git checkout master

git checkout -b fix101

git checkout master

git merge --no-ff  -m 'fix bug 101' fix101

3)切换到dev分支,取出缓存的作用,继续后面的工作

git checkout dev

git stash pop

git stash list

备注:引用了廖老大的内容,主要是为了自己使用时能集中参考

多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin branch-name推送自己的修改;

  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

  3. 如果合并有冲突,则解决冲突,并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name


git标签

  • 命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;

  • git tag -a <tagname> -m "blablabla..."可以指定标签信息;

  • git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;

  • 命令git tag可以查看所有标签。



转载于:https://my.oschina.net/u/1453451/blog/483607

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值