Git 命令

参考文章:
Git 常用命令详解(二)

.gitignore 文件

作用: 忽略某些文件或文件夹
在仓库根目录下创建名称为“.gitignore”的文件,写入不需要的文件夹名或文件,每个元素占一行即可,如

target
bin
*.db

工作区和暂存区的概念

git add 实际上是把文件修改添加到暂存区

git commit 实际上是把暂存区的东西添加到当前分支

可用git status 查看当前分支状态

git基础命令

git rm:从当前的工作空间中和索引中删除文件,例如'git rm app/model/user.rb'
git commit:提交当前工作空间的修改内容,例如'git commit -m story #3, add user model',提交的时候必须用-m来输入一条提交信息
git log:查看历史日志
git revert:还原一个版本的修改,必须提供一个具体的Git版本号,例如'git revert bbaf6fb5060b4875b18ff9ff637ce118256d6f20',Git的版本号都是生成的一个哈希值
git reset:将当前的工作目录完全回滚到指定的版本号
git stash:将当前未提交的工作存入Git工作栈中,时机成熟的时候再应用回来,这里暂时提一下这个命令的用法,后面在技巧篇会重点讲解
git config:利用这个命令可以新增、更改Git的各种设置

.git文件夹

在代码根目录下有一个.git文件夹,有几个比较重要的文件和目录需要解释一下:
HEAD文件存放根节点的信息,其实目录结构就表示一个树型结构,Git采用这种树形结构来存储版本信息,那么HEAD就表示根;

refs目录存储了你在当前版本控制目录下的各种不同引用(引用指的是你本地和远程所用到的各个树分支的信息),它有heads、remotes、stash、tags四个子目录,分别存储对不同的根、远程版本库、Git栈和标签的四种引用,你可以通过命令'git show-ref'更清晰地查看引用信息;

logs目录根据不同的引用存储了日志信息。

git clone

1)git clone:这是一种较为简单的初始化方式,当你已经有一个远程的Git版本库,只需要在本地克隆一份

例如:git clone git://github.com/someone/some_project.git some_project

上面的命令就是将'git://github.com/someone/some_project.git'这个URL地址的远程版本库,完全克隆到本地some_project目录下

如果你使用git clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库(git remote -v)并默认以 “origin” 为简写。

git init 初始化

2)git initgit remote:这种方式稍微复杂一些,当你本地创建了一个工作目录,你可以进入这个目录,使用git init命令进行初始化;Git以后就会对该目录下的文件进行版本控制,这时候如果你需要将它放到远程服务器上,可以在远程服务器上创建一个目录,并把可访问的URL记录下来,此时你就可以利用git remote add命令来增加一个远程服务器端,

例如:git remote add origin git://github.com/someone/another_project.git

上面的命令就会增加URL地址为'git: //github.com/someone/another_project.git',名称为origin的远程服务器,以后提交代码的时候只需要使用 origin别名即可

  1. 修改origin
    git remote set-url [name] [new_Url]

4)查看远程仓库
git remote -v

git branch 分支

本地分支

查看本地分支:$ git branch
查看远程分支:$ git branch -r
创建本地分支:$ git branch [name] ----注意新分支创建后不会自动切换为当前分支

创建新分支并立即切换到新分支:$ git checkout -b [name]

删除分支:$ git branch -d [name]
-d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项

合并分支:$ git merge [name]
将名称为[name]的分支与当前分支合并

远程分支

查看远程分支:$ git branch -r
创建远程分支(本地分支push到远程):$ git push origin [name]
删除远程分支:$ git push origin :heads/[name]$ gitpush origin :[name]

  • 创建空的分支:(执行命令之前记得先提交你当前分支的修改,否则会被强制删干净没得后悔)
$git symbolic-ref HEAD refs/heads/[name]
$rm .git/index
$git clean -fdx

git checkout

切换分支:$ git checkout [name]
checkout:Git的checkout有两个作用,其一是在不同的branch之间进行切换,另一个功能是还原代码的作用,例如git checkout app/model/user.rb就会将user.rb文件从上一个已提交的版本中更新回来,未提交的内容全部会回滚

git checkout -- readme.txt

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

  • 一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;

  • 一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次git commit或git add时的状态。

git stash 暂存工作现场

工作进行到一半,还不想提交.可以用git stash把工作现场存储起来(没有git addgit commit) ------假设该分支为 wechat

储存起来后,使用 git status 查看当前分支状态,此时是干净的工作区

如果此时需要在master分支上修复BUG,切换到master分支, 再创建新分支进行BUG修改; 完全不会影响到wechat分支的代码.

在新分支修改完BUG后, 合并到master分支push到远端代码版本后,可以切换回wechat分支继续之前的工作.

使用 git stash list 查看刚刚暂存的工作,我们需要恢复工作区. 执行 git stash apply 命令恢复工作区,恢复后可自行删除暂存 git stash drop

当然有一个更简便的方法恢复工作区并删除stash暂存: git stash pop

如果stash有多个暂存时,我们可以指定恢复(git stash apply stash@{0} ) 或 指定删除(git stash drop stash@{0} ) 某个stash.

在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick <commit id>命令,把bug提交的修改“复制”到当前分支,避免重复劳动。

git log :查看提交日志

  git log --pretty=oneline 查看提交日志(只打印commit id和描述)

git status : 仓库当前的状态

$ git status

On branch master

Changes not staged for commit:

  (use "git add <file>..." to update what will be committed)

  (use "git checkout -- <file>..." to discard changes in working directory)

 

modified:   readme.txt

 

no changes added to commit (use "git add" and/or "git commit -a")

git status命令可以让我们时刻掌握仓库当前的状态,上面的命令输出告诉我们,readme.txt被修改过了,但还没有准备提交的修改。

$ git status

On branch master

Changes to be committed:

  (use "git reset HEAD <file>..." to unstage)

 

modified:   readme.txt

git status告诉我们,将要被提交的修改包括readme.txt,下一步,就可以放心地提交了

$ git status

On branch master

nothing to commit, working tree clean

Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working tree clean)的

一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的

可以用git log查看提交日志


git diff: 查看difference

  git diff HEAD -- readme.tx 可以查看工作区和版本库里面最新版本的区别


$ git diff readme.txt 

diff --git a/readme.txt b/readme.txt

index 46d49bf..9247db6 100644

--- a/readme.txt

+++ b/readme.txt

@@ -1,2 +1,2 @@

-Git is a version control system.

+Git is a distributed version control system.

 Git is free software.

git rebase 解决冲突

1.拉取远程代码 到 master

2.新建本地分支 local

3.在本地分支提交代码 commit

4.切换到本地 master分支, 重新拉取远程代码, 发现此时已经有其他人 提交了代码

5.切换到 local 分支, 执行 git rebase master

情况1: 没有冲突, 切换到master 分支 执行 git merge local, 并提交 git push

情况2: 有冲突, 先手动解决冲突; 解决冲突后, git add 一下, git rebase --continue, 如果没有冲突了, 可以执行合并分支并推送到远程

git rm 删除文件/文件夹

git rm -r --cached target 删除远程仓库 target文件夹,删除后提交即可

git rm target 删除本地 target文件夹,删除后提交即可

git reset & git reflog(回退版本/撤销暂存区修改 & 查看命令日志)

在Git中,用HEAD表示当前版本

git reflog: 用来记录你的每一次命令,以便确定回退未来的commit id

git reset --hard commit_id

git reset --hard HEAD^ 回退到上一个版本

git reset --hard HEAD~100 回退到往上100个版本

git reset HEAD <file> 把暂存区的修改撤销掉(unstage),重新放回工作区

远程主机名一般为origin,或者 为其他

git fetch

git fetch [远程主机名] [BranchName]:[LocalBranchName] 相当于是从远程获取master(BranchName)最新版本到本地分支,不会自动merge

如: git fetch //创建并更新本地远程分支
git fetch orgin //手动制定了远程主机,不指定分支时默认为master分支
  git fetch orgin master //从远程获取master分支最新版本到本地分支
  git fetch orgin master:temp //从远程获取master分支最新版本到本地temp分支

git log -p master ..origin/master //比较本地的master分支和origin/master分支的差别
git merge origin/master //进行合并远程仓库的master到本地

git pull

git pull [remoteName] [localBranchName] 等于是从远程获取最新版本并merge到本地分支

git pull origin master //相当于git fetch 和 git merge

git push

推送远程仓库:$ git push [remoteName] [localBranchName]
$git push origin test:master // 提交本地test分支作为远程的master分支
$git push origin test:test // 提交本地test分支作为远程的test分支

原文地址:https://www.cnblogs.com/Tester_Dolores/p/13925760.html