码迷,mamicode.com
首页 > 其他好文 > 详细

gitGuide

时间:2015-11-26 12:40:27      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

git 

  working directory    repository

             stage   master(branch)

 

git init

git add filename

git commit -m "explanation information"

 

git status

git diff filename  #when you edit one file but before you add it to stage

git diff HEAD -- filename  #可以查看工作区和版本库里最新版本的区别(版本库包括stage和branch)

 

git checkout --filename    #把该文件在工作区的修改全部撤销。这里有两种情况

    #一种是在工作区修改后,还没有add到stage,这时撤销命令执行后,回到跟版本裤一模一样的状态;

      #一种是该文件已经add到stage然后又在工作区对该文件进行了修改,这时撤销命令执行后,文件回到跟stage里一样的状态

git reset HEAD filename

    #文件修改并add到stage后但还没执行commit,执行该命令可以撤销stage里的修改,把该文件重新放回工作区

 

git rm filename

git commit -m "explanation msg"

    #在实际开发中删掉了某个文件,但是并没有在git中删掉对该文件的跟踪,git status会提示该文件已经被删除

    #然后需要在git删除对该文件对跟踪, git rm filename确认对该文件对删除,并从版本库中删除该文件

    #执行git rm需要执行commit以提交当前版本

git checkout --filename

    #在实际开发删除了某个文件后,但是还没执行git rm 之前,可以用该命令恢复删除的文件

 

git log

git log --pretty=oneline

    #查看每次的commit信息,包括每次的commit_ID

git reset --hard HEAD^

git reset --hard commit_ID 

    #回退到上一个commit版本,HEAD指代当前commit版本,HEAD^表示上一个commit版本

    #直接指定commit_ID可以直接回退到指定的commit版本

git reflog

    #回退到某个以前的版本,但是又想回到后来的某个版本时,不知道commit_ID的话就不能回到该版本

    #git reflog可以查看每次版本改变的信息

 

git remote add

git remote add origin git@github.com:lactic-h/learngit.git

    #在远端建立一个远程库,但是该远程库是空。于是该命令把本地库与远程库相链接

    #origin是远程库的默认名称

#如果输入$ git remote add origin git@github.com:djqiang(github帐号名)/gitdemo(项目名).git
  #提示出错信息:fatal: remote origin already exists.
  #解决办法如下:
    #1、先输入$ git remote rm origin
    #2、再输入$ git remote add origin git@github.com:djqiang/gitdemo.git 就不会报错了!

git push

git push -u origin master

    #将本地库的内容推送到远程库

    #实质上是把本地库到master分支推送到远程库,

    #第一次推送master分支时,加上参数-u,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

git push origin master

 

 

git clone git@github.com:lactic-h/gitskills.git(git_address_url)

    #远程库已经存在,从远程库克隆到本地并在本地建立一个与远程库相同的本地库

    #git_address_url可以是ssh链接,也可以是https链接,https链接需要输入账号密码

 

 

git branch

git branch branch_name_b

git checkout branch_name_b

git checkout -b branch_name_b

 

git checkout branch_name_a

git merge branch_name_b

  #git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。
  #注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。
  #当然,也不是每次合并都能Fast-forward,我们后面会将其他方式的合并。

git branch -d branch_name_b

 

#merge conflict

git merge branch_name_b

  #error_merge_conflict

git status

  #show the conflict information

vi filename

  #modify the conflict file 

  #in fact, this step will modify the two files at the same time

git merge branch_name_b

 

 

 

#ff or no-ff

git merge branch_name_B

git merge --no-ff -m "merge with no-ff" branch_name_B

  #ff和no ff的结果都是一样的,都会合并,
  #其最大区别在于,ff会"默默"地合并,其仅仅是将指针移动到分支的最新处(当然删除分支并不会对master产生任何影响),
  #而no ff则是重新建立了一个commit,然后将合并当做一个comiit来处理,自然就产生了合并的信息.

 

 

git stash
git stash list
git stash apply <choosed parameter which can assign the stash ID>
git stash drop <choosed parameter which can assign the stash ID>

 


git branch -d branch_name #after merge
git branch -D branch_name #enforce delete

 

git remote

git remote -v

    #查看远程库信息,-v参数查看详细信息

 

git push origin master
git push origin dev #other branch

    #将本地库提交到远程库

 

#多人合作,push时冲突

#another workmate

git clone git@github.com:lactic-h/learngit.git
git checkout -b dev
git add
git commit
git push origin dev

 

#myself
git push origin dev

  #因为小伙伴在我之前已经提交过一次dev,所以我再次提交dev时,可能会冲突
  #solution:先把remote的dev pull下来,在pull的时候会自动merge,merge的时候会出现conflict,然后在本地解决冲突,commit后再push
git pull
  #pull的时候可能会报错,因为本地的dev分支并没有与远程的origin/dev分支相链接
  #solution:设置dev与origin/dev链接
  git branch --set-upstream dev origin/dev
  #上面这个命令好像不能用了
  git branch --set-upstream-to origin/dev dev

    #假设远程公共仓库,有一个master和一个dev分支,进行多人协作开发时候(每个人的公钥必须加入到远程账号下,否则无法push),
    #每个人都应该clone一份到本地。
    #但是clone的只是master,如果远程的master和dev一样,没关系;如果不一致,则需要clone出dev分支
    #git checkout -b dev origin/dev
    #之后每个人在本地的dev分支上独自开发(最好不要在master上开发),
    #开发完成之后push到远程dev
    #git push origin dev。
    #之后审核人再确定是否合并dev到master。

 

 

#tag

git tag tag_name

     #给当前分支的最近提交的commit打标签

git tag

     #查看标签
git log --pretty=oneline --abbrev-commit
    #查看之前commit的信息
git tag tag_name commit_ID

     #给之前提交的commit打标签
git show tag_name

     #查看标签信息。
git tag -a tag_name -m "explanation message"
     # -a参数指明tag_name, -m参数指定说明文字
git tag -s v0.2 -m "signed version 0.2 released" fec145a(commit_ID)
    # 可以通过-s用私钥签名一个标签
    #签名采用PGP签名,因此,必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错:
git tag -d tag_name

     #删除标签
git push origin tag_name

     #因为创建的标签都只存储在本地,不会自动推送到远程。所以,如果要推送某个标签到远程,
git push origin --tags

     #一次性推送全部尚未推送到远程的本地标签

 

 

#如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
#然后,从远程删除。删除命令也是push,但是格式如下:
git tag -d v0.9
git push origin :refs/tags/v0.9

 

 

#config

.gitignore

    #本地配置文件

current_repository.git/config

    #当前仓库的git配置文件
~/.gitconfig

    #当前用户的git配置文件

git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.unstage ‘reset HEAD‘
git config --global alias.last ‘log -1‘
git config --global alias.lg "log --color --graph --pretty=format:‘%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset‘ --abbrev-commit"

 

gitGuide

标签:

原文地址:http://www.cnblogs.com/lactic/p/4997050.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!