[置顶] Git常用命令

仓库

1.      克隆一个远程repository到本地

  • HTTP的方式: git clone https://github.com/linus87/GitTest.git
  • SSH的方式:git [email protected]:linus87/GitTest.git
  • Git Read-Only的方式: gitclone git://github.com/linus87/GitTest.git

一般来说,HTTP和SSH的方式GIT都支持,但也不绝对,如果HTTP不行,就换SSH。反之亦然。

如果是自定义目录,则可能如下:

git clone [email protected]:username/GitTest.git my_gittest

指定repository的克隆,这种方式会把这个repository下的所有branches都创建一遍,但只有一个当前活跃的分支是被check out下来的。

2.      删除仓库

git remote remove <repository-name>

3.      重命名仓库

git remote rename <old> <new>

查看

1.      查看分支状态

包括被修改的文件,没有被追踪的文件在这里会显示出来。

git status

Stage被修改的文件:

git add project/src/main/webapp/css/tab.css

2.      查看单个文件的状态

git status -- project/src/main/webapp/css/tab.css

3.      查看单个文件的提交日志

git log -- project/src/main/webapp/css/tab.css

比较

1.      比较工作树中单个文件与其在前一次提交时的区别

git diff -- project/src/main/webapp/css/tab.css

提交

1.      放弃被修改文件所做的改动(已经被stage的改动)

git reset<paths>

paths默认是HEAD,也可以自定为其它文件名和路径。

比如git reset -- frotz.c  

另外,对某个文件使用git reset会使某个刚被添加的文件从被追踪记录中去除,是git add的反向命令。

2.      提交改动

git commit –m "commit messages"

3.      提交时自动stage被改动或删除的文件

git commit –a或者 git commit –all

4.      回滚提交

git reset --soft commits

commits格式: HEAD、 HEAD^、HEAD~2,分别代表最近的三个提交。

编辑index

index的内容是指被staged的改动。

1.      Stage新的文件或被改动过的文件

git add project/src/main/*.css

编辑workingtree

working tree的叶节点就是有改动(但没有加入index,就是没有被staged)的文件。

1.      保存本地修改,但不加入index,同时回滚到HEAD

git stash

编辑

1.      从工作树中删除文件,同时从index中也删除

git rm -- a.css

2.      把文件从index中移除,但保留文件和改动的内容

git rm --cached -- a.css

3.      删除有文件(所有的文件没有改动)的文件夹

git rm -r folder

4.      强制删除文件夹(包含的文件有改动情况下使用)

git rm -r -f folder

5.      从另一个仓库或本地分支fetch并且merge

git pull origin master

解释: origin是一个repository名字,master是一个分支。

分支

1.      列出本地分支

git branch

2.      列出远程服务器上的分支

git branch --remotes

3.      同时列出远程与本地分支

git branch -a

4.      创建分支

git branch <branchname>

这还只是本地创建分支,本地创建成功后,还需要git push提交到远程服务器。

5.      设置跟踪信息

git branch --set-upstream-to=origin/<branch>

6.      删除本地分支

git branch (-d | -D) <branchname>

-D与-d的区别是,-D有强制删除的意思,忽略merge状态。

7.      删除本地远程分支

git branch (-d | -D) -r origin/<branchname>

这个命令并不能删除真正的远程分支,只是删除本地的远程分支,下次git fetch/pull又会重新从真正的远程拿下来。

要删除真正的远程分支,还得登陆github,在github上删除真正的远程分支。

8.      修改分支的名字

git branch (-m | -M) [<oldbranch>] <newbranch>

配置

1.      如何配置,使git只push当前分支

git config --global push.default current

push.default的值有以下可能: nothing,matching, upstream, current。

如果不配置,每次就得手动写成这样:

git push origin my-branch

2.      配置显示用的用户名和邮箱地址

git config user.name Linus Yan
git config user.email [email protected]

3.      保存提交代码用的用户名和密码

git config credential.https://github.example.com.username linus

密码部分稍复杂,需要保存,保存方式有两种:

  • 保存在缓存:
  • 保存在硬盘:

git config --global credential.helper 'store --store=~/.git-credentials'

如果是单个项目,但使用的是global设置:

git config credential.helper 'store'

.git-credentials文件的内容:

格式:https://user:[email protected]
下面这个例子用的是token取代pass(因为使用了2FA):
https://linus:[email protected]

合并

1.      当前分支的历史合并

git merge topic

因为git是分布式系统,所以本地和服务器上的历史可能不一致,因此需要把服务器上的和本地的进行合并。

topic指的就是本地分支上一个命名的commit。

2.      放弃合并

git merge --abort

使用前提:使用git merge前,不能有没有提交的改动。否则git无法还原。

工作目录

1.      转换工作分支

git checkout <branchname>
git pull

首先用git checkout换掉当前工作分支,然后再用git pull拿取服务器上最新的代码。

有时候直接git pull无效,尝试使用如下命令:

git pull origin <branchname>

2.      合并两个不同的分支

git checkout <branchname>
git pull

首先checkout另一个分支到本地并拿到最新代码,然后回到当前分支

git merge<branchname>

再用merge就可以了。

主分支和副分支同时开发

1.      副分支合并主分支

假设当前分支是topic:

          A---B---C topic

         /

    D---E---F---G master

// topic为副分支,master为主分支

git rebase master topic

之后将是:

                  A'--B'--C' topic

                 /

    D---E---F---G master

修改项目repository来源

git remote set-url origin git://github.scm.corp.ebay.com/my-org/my-repo.git

你可能感兴趣的:(git)