GIT 常用命令

来源:互联网 发布:怎么修改淘宝号地区 编辑:程序博客网 时间:2024/05/20 14:42

个人小说网站:友书(laiyoushu.com)绿色纯净无广告,欢迎广大同行前来指点



理解git

    git中有个很重要的概念叫做暂存区,暂存区位于本机。所以,每次commit其实只是将add添加的文件提交到暂存区。然后push的时候一次
性的将暂存区的数据提交到服务器。
    所以,我们应该养成一个每次写完代码,测试无误后就立即提交到暂存区。这样做的好处是:当你不小心对本地文件进行了删除,无法
撤销,而服务器中又没有的时候,你就可以用 git reset --hard 命令从暂存区中将你最新最近提交的代码拉取回来。当然,好处不止一
 个,在下面我再具体举例

git add --添加本地文件 
git commit --提交更改至暂存区
git push --将暂存区的更改推送到服务器 


一>.搭建服务器:
a>.将服务器文件夹(Bonobo.Git.Server)放至C:\inetpub\wwwroot目录下
b>.打开IIS,将Bonobo.Git.Server转换为应用程序,应用程序池为:ASP.NET v4.0
c>.点击浏览80即可访问该服务器,默认管理员初始帐号密码为:admin


二>.创建库
a>.要创建库:首先要在服务器上创建一个团队,一个管理库的团队
admin登录-->团队-->创建团队
b>.创建服务器库:
admin登录-->库-->创建新库
(在这里,我们要用到的是git库位置这个url,点击创建的库,详细信息列表中,第二个就是)
三>.创建本地库
a>.创建一个本地文件夹,并将项目文件放进去,在该文件夹中右键-->选择GIT BASH HERE 在弹出的git命令对话框中依次输入以下命令:
1>.git init 将当前目录初始化为GIT仓库
2>.git add . 添加所有
3>.git commit -m"finished"提交本次事物、即将所有add的文件提交到git仓库,引号内部表示本次提交的提示信息
b>.将本地仓库关联至服务器、
1>.git remote 执行后如果没有任何输出,是因为还没有添加远程仓库
2>.git remote add origin 服务器仓库地址 
3>.git remote 
c>.将代码上传至服务器
1>.git push 代码上传至服务器
 ps:如果是新建分支第一次push,会提示:
fatal: The current branch develop has no upstream branch.  
To push the current branch and set the remote as upstream, use  
git push --set-upstream origin master
2>.git push --set-upstream origin master 
3>.git push 
ps:如果是另一分支,上传命令为: git push origin ajax

具体举列:
1.在J盘GitTest目录下创建一个test文件夹
2.在test文件夹中右键选择GIT BASH HERE 弹出git命令对话框
3.在命令对话框中输入:(git init)并运行,用以将该文件夹初始化为git本地仓库;输出显示为:
Initialized empty Git repository in J:/Test/GitTest/test/.git/
4.将项目文件(lianfang)该文件夹中
5.在命令对话框中输入:(git add .)并运行,作用是选中并添加当前文件夹中的所有文件及文件夹,正常情况下没有任何输出;
     在有js文件时,输出如下警告:
warning: LF will be replaced by CRLF in lianfang/lianfang/Scripts/jquery-1.7.1.js.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in lianfang/lianfang/Scripts/jquery-1.7.1.min.js.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in lianfang/lianfangHT/Scripts/jquery-1.7.1.js.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in lianfang/lianfangHT/Scripts/jquery-1.7.1.min.js.
The file will have its original line endings in your working directory.
6.在命令对话框中输入:(git commit -m"Add Success!")并运行,作用是将该文件夹下所有文件及文件夹提交到本地暂存区,输出
     如下显示:
[master (root-commit) 20b2dfe] Add Success
133 files changed, 26353 insertions(+)
create mode 100644 lianfang/BLL/BLL.csproj
create mode 100644 lianfang/BLL/BLL.csproj.user
create mode 100644 lianfang/BLL/LoginBLL.cs
create mode 100644 lianfang/BLL/Properties/AssemblyInfo.cs
create mode 100644 lianfang/BLL/RoleBLL.cs
create mode 100644 lianfang/BLL/bin/Debug/BLL.dll
create mode 100644 lianfang/BLL/bin/Debug/BLL.pdb
create mode 100644 lianfang/BLL/bin/Debug/Controllers.dll
create mode 100644 lianfang/BLL/bin/Debug/Controllers.pdb
create mode 100644 lianfang/BLL/bin/Debug/DAL.dll
(文件越多,输出显示越多)
7.在命令对话框中输入:(git remote)并运行,输出显示为:
origin
8.如果没有任何输出,代表本地仓库还没有建立连接;所以,我们应该先与服务器建立连接之后在运行git remote;在命令对话框中
     输入:(git remote add origin http://localhost/Bonobo.Git.Server/test.git)并运行,作用是将本地仓库与服务器
     进行关联,没有任何输出,然后再运行git remote,这时输出显示为:origin
9.在命令对话框中输入:(git push)作用是将暂存区的文件及文件夹推送至服务器,输出显示为:
Counting objects: 138, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (119/119), done.
Writing objects: 100% (138/138), 1.12 MiB | 0 bytes/s, done.
Total 138 (delta 41), reused 0 (delta 0)
To http://localhost/Bonobo.Git.Server/test.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.
   如果输出显示为:
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin master
   说明是第一次push,这时,我们应输入:(git push --set-upstream origin master)这时,输出显示为:
Counting objects: 138, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (119/119), done.

四>.示范新增:
a>.在本地库中新建一个文件夹
b>.git status 查看是否有刚刚新增的文件、文件夹(红色字体,中文不显示)
c>.git add . 跟踪所有改动过的文件及文件夹(成功后不做任何显示)
d>.git commit -m "add"提交所有更新过的文件及文件夹(成功后,第一行显示:[master 2747f7c] 你命名的提示内容)
e>.git push 将所有变更提交到服务器,这时,在服务器-->浏览库中就可以看到新增的内容了
Ps:
   1>.为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
   2>.git status命令可以让我们时刻掌握仓库当前的状态而 git diff则可以让我们随时查看详细的修改情况
  
暂存区原理:
   第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
   第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支
   需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。






五>.示范删除:
a>.在本地库中删除欲删除的文件夹或文件
b>.git status 查看状态(如果是文件夹,便可看见以红色字体显示以deleted开头的该文件夹下所有文件)
c>.git add . 跟踪所有改动过的文件及文件夹(成功后不做任何显示)
d>.git commit -m "del"提交所有更新过的文件及文件夹(成功后,第一行显示:[master 2747f7c] 你命名的提示内容)
e>.git push 将所有变更提交到服务器,这时,在服务器-->浏览库中就可以看到新增的内容了
 
误删,未提交到本地暂存库,从服务器重新拉取:
git checkout .
误删,已提交到本地暂存库,从本地暂存库拉取;
git reset --hard

具体举例:
1.手动删除本地仓库文件夹下的某一目录下的database文件
2.在命令对话框中输入:(git status)并运行,我们可以很清晰的看到被删除的文件,输出显示为:
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
 (use "git add/rm <file>..." to update what will be committed)
 (use "git checkout -- <file>..." to discard changes in working directory)
        deleted:    lianfang/database
no changes added to commit (use "git add" and/or "git commit -a")
3.在命令对话框中输入:(git add .)并运行,没有任何输出
4.在命令对话框中输入:(git commit -m"del files"),并运行,输出显示为:
[master ecd90b6] del
1 file changed, 0 insertions(+), 0 deletions(-)
delete mode 100644 lianfang/database
5.在命令对话框中输入:(git push)并运行,输出显示为:
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 262 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To http://localhost/Bonobo.Git.Server/test.git
20b2dfe..ecd90b6  master -> master
六>.示范修改:
a>.在本地库中修改某一文件(以文本文档举例)
b>.git status 查看状态(红色字体显示:modified: 被修改文件名)
c>.git diff 查看该文本文档具体被修改的内容(原文件被修改显示红色,新增显示绿色)
d>.git add . 跟踪所有改动过的文件及文件夹(成功后不做任何显示)
e>.git commit -m"edit"  提交所有更新过的文件及文件夹(成功后,第一行显示:[master 2747f7c] 你命名的提示内容)
f>.git push 将所有变更提交到服务器,这时,在服务器-->浏览库中就可以看到新增的内容了
七>.克隆远程库
a>.在本地新建一个文件夹用作库
b>.git clone http://localhost/Bonobo.Git.Server/test1.git   Ps:git clone Git库位置 成功执行时,第一行显示::Cloning into '被克隆的库'...

八>.查看更改、撤销、历史操作记录
git log 查看提交历史(详细模式)
git log --pretty=online查看提交历史(简洁模式)
git reset --hard撤销当前目录下的所有版本
git reset --hard^撤销到上个版本
git reset --hard^^撤销到上上个版本
git reset --hard^100撤销到前第100个版本
git reset --hard (版本号)向上撤销、回到未来
git reflog 查看历史命令
git checkout -- readme.txt把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态
git reset HEAD readme.txt撤销掉暂存区的修改,及add之后的
git checkout .从服务器匹配当前目录下缺失的文件,并下载

    Ps:
      1>.在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
      2>.指定回到未来的某个版本git reset --hard (版本号),版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了
      3>.HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
      4>.穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本
      5>.要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
九>.分支管理
创建dev分支:
git checkout -b dev  
    Ps:git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev创建分支
$ git checkout dev切换分支
这时候,我们就可以在dev分支上任意增删改查。
提交分支至服务器:
            git push origin 分支名


操作结束后,再切回master分支即可
切换会master(主)分支后,查看刚刚操作的文件,发现没有,这是因为之前的操作是提交在dev分支上的
所以,要想在master上也有刚刚操作的内容,我们只要将dev分支上的文件合并到master上即可:
合并分支:
a>.切换回主分支
git checkout master  master--即你的主分支名字
b>.执行分支合并
git merge dev --dev:即你的分支名字
c>.选中所有文件
git add .
d>.提交至暂存库
git commit -m "xxx"
e>.提交至服务器
git push

删除本地分支:
git branch -D dev--dev:即你的分支名字
删除远程分支:
git push origin :dev--dev:你的分支名字


创建bug分支:
    a>.保存状态
git stash --保存当前状态,方便bug修复后再次回到当前状态
    b>.在bug出现的枝干上创建bug分支(假设实在主干上)
git checkout master--首先切换回出现问题的枝干上
git checkout -b but-001 --创建bug分支
            c>. 然后对bug分支进行修改、合并并删除,最后切换回之前的状态
git checkout dev--切换回之前工作的分支
git stash list--查看被保存的工作列表
git stash apply--恢复到切换bug临时分支时保存的工作内容状态(不删除stash中保存的内容)
git stash drop--删除stash中保存的工作内容状态
git stash pop -=-恢复环境并删除保存的状态


主要命令:
查看分支:get branch
创建分支: get branch <name>
切换分支:get checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前主分支: git merge <name>
删除分支:git branch -d <name>
重命名分支:git branch –m oldname newname


分支原则:
master(主)分支:
特点:必须是非常稳定的,也就说仅仅只用来发布新版本,平时不在master上干活
dev(临时)分支:
特点:不是很稳定,平时在这个分支上干活,测试无误后将其合并到master分支上
bug分支:
特点:用来调试bug,调试无误后,再将代码合并到master分支上

常用速查表、
a>.创建版本库:
git clone <url>克隆远程版本库
git init 初始化本地版本库
b>.修改和提交
git status 查看状态
git diff 查看变更内容(仅在尚未add的时候使用)
git add . 跟踪所有改动过的文件及文件夹
git add <file>跟踪指定的文件
git mv <old> <new>文件改名
git rm <file> 删除指定文件
git rm --cached <file>停止跟踪文件、但不删除
git commit -m "ok"提交所有更新过的文件及文件夹
git commit --amend修改最后一次提交
c>.查看提交历史
git log 查看提交历史
git log -p <file>查看指定文件的提交历史
git blame <file>以列表的方式查看指定文件的提交历史
d>.撤销
git reset --hard HEAD撤销工作目录中所有未提交文件的修改内容
git checkout HEAD <file>撤销指定的未提交文件的修改内容
git revert <commit>撤销指定的提交
e>.分支与标签
git branch 显示所有本地分支
git checkout <branch/tag>切换到指定分支或标签
git branch <new-branch>创建新分支
git granch -d <branch>删除本地分支
git tag 列出所有本地标签
git tag <tagname>基于最新提交创建标签
git tag -d <tagname>删除标签
f>.合并与衍合
git merge <branch>合并指定分支到当前分支
git rebase <branch>衍合指定分支到当前分支
g>.远程操作
git remote -v 查看远程版本库信息
git remote show <remote>查看指定远程版本库信息
git remote add <remote> <url>添加远程版本库
git fetch <remote>从远程库获取代码
git pull <remote> <branch>下载代码及快速合并
git push <remote> <branch>上传代码及快速合并
git push <remote> :<branch/tag-name>删除远程分支或标签
git push --tags上传所有标签

  
参考文档:
http://www.jianshu.com/p/eaaba8dc3ab3(本地Git与远程仓库进行关联)
http://blog.csdn.net/dazhi_100/article/details/38851733(git 文件添加、变更的提交)
http://www.jb51.net/article/55442.htm(Git 常用命令速查表(图文+表格))
http://www.cnblogs.com/sk-net/archive/2011/07/11/2103282.html(git 分支 合并)
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000(廖雪峰GIT教程) 
http://www.yiibai.com/git/home.html(Git教程)
http://backlogtool.com/git-guide/cn/intro/intro1_1.html(猴子都能懂的GIT教程)