Git常用命令详解

版本控制工具有很多,比如 CVS、SVN、Git 等,但目前用得最广泛的应该就是 Git 了。
下面介绍一些常用的 Git 命令。
一、全局、本地必要配置
挺有必要的,会更清晰的跟踪提交者的信息。
# Git global setup
$ git config --global user.name "your_name"
$ git config --global user.email "your_ email"
# Git local setup
git config user.name "your_name"
git config user.email "your_email"
二、初始化仓库
# 初始化
$ git init
# 与远程仓库建立连接
$ git remote add origin [your_repository_address]
# 修改远程仓库地址
$ git remote set-url origin [your_repository_address]
# 或者先删后加
$ git remote rm origin
$ git remote add origin [your_repository_address]
# 或者直接修改 .git/config 文件
三、关于克隆仓库
$ git clone [repository_address]
# 与上面不同的是,它会在当前目录下创建一个 your_folder_name 的目录,而不再是与仓库名称同名的目录了
$ git clone repository_address [your_folder_name]
以上这种方式默认是克隆 master
主分支,而且通过 git branch --list
能看到克隆后在本地也只有这一个分支。
如果再通过新建分支再拉取指定分支,甚至可能还需要解决冲突,太繁琐了。
那么,如何快速有效的直接克隆远程指定分支?
$ git clone -b [指定分支名] [远程仓库地址]
# 亦可以指定目录名称
$ git clone -b [指定分支名] [远程仓库地址] [your_folder_name]
比如,我远程有 master
和 develop
两个分支,通过 git clone -b develop git@github.com:toFrankie/git_dev_demo.git
会自动克隆 develop
分支到本地,同样克隆后本地只有 develop
一个分支。
*部分内容源自 Git 克隆远程仓库的指定分支。
四、分支操作
1. 列出所有分支
# 列出所有本地分支
$ git branch
# 列出所有远程分支
$ git branch -r
# 列出所有本地分支和远程分支
$ git branch -a
2. 新建分支
若分支已存在,以下命令都会失败
# 新建分支,但依然停留在当前分支
$ git branch [branch-name]
# 新建分支,并切换至该分支。
$ git checkout -b [branch-name]
# 根据已有分支创建新的分支
$ git checkout -b [branch-name] origin/<远程分支名称>
# 例如,创建一个远程 develop 分支的本地分支
$ git checkout -b develop origin/develop
# 重命名本地分支名称
$ git branch -m [old-branch-name] [new-branch-name]
3. 合并分支
# 合并指定分支到当前分支
$ git merge [branch-name]
4. 删除分支
# 删除本地指定分支
$ git branch -d [branch-name]
# 删除远程分支
git push origin --detele [branch-name]
# 删除远程分支(方法二:向远程分支推送一个空分支)
$ git push origin :<远程分支名>
5. 重命名远程分支
要重命名远程分支名称,其实就是先删除远程分支,然后重命名本地分支,再重新推送一个远程分支。例如将远程分支 dev 重命名为 develop。
# 1. 删除远程分支 dev
$ git push origin --delete dev
# 2. 重命名本地分支 dev 为 develop
$ git branch -m dev develop
# 3. 推送本地分支 develop
$ git push origin develop
五、暂存提交推送
1. 暂存更改
关于 git add
命令,需要注意一下 1.x
版本与之有些不同,最后有标注。
# 提交新文件(new file)、被修改(modified)文件以及被删除(deleted)文件。
$ git add .
# 提交新文件(new file)、被修改(modified)文件以及被删除(deleted)文件。
$ git add -A
# 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new file)
$ git add -u
# 提交新文件(new file)和被修改(modified),不包括被删除(deleted)文件
$ git add --ignore-removal .
# 获取帮助
$ git add -h
# 以上为 2.x 版本的标准。
# 以下为 1.x 版本的区别之处:
# 1.x 的 `git add .` 不包括被删除文件(deleted)
# 1.x 不存在 `git add --ignore-removal .` 命令,但其作用等同于 1.x 版本 `git add .`
2. 提交暂存
# 提交已暂存文件
$ git commit -m 'commit message'
# 提交已暂存文件,以及跟踪过但未被添加到暂存的文件
# 注意:git commit -am 可以写成 git commit -a -m,但不能写成 git commit -m -a
$ git commit -am 'commit message'
# 修改最后一次的提交说明(但 commitId 会改变哦,因为它是一次全新的提交)
$ git commit --amend
注意一下,
git commit --amend
命令,只能修改最新一次的提交说明 ,执行命令进入 Vim 模式(具体如何插入编辑,保存退出不展开赘述了,相信你们都会了)。亦可通过git commit --amend -m 'Commit Message'
直接覆盖不用进入 vim 编辑器。需要注意的是,该命令会导致
commitId
(快照唯一标识)发生改变。可通过git log
(查看历史提交记录)前后对比发现。其实呢,修改过的提交实际上是全新的提交,而先前的提交将不再位于您当前的分支上。该命令其实还有很多选项,还能更改提交文件等,想了解请看这里。
3. 推送至远程分支
主要用于将本地更新推送到远程主机,但不同简化形式、命令参数产生延申效果。
一般地,远程主机名 remote 都为
origin
。
# 不省略本地分支名和远程分支名情况下,冒号(:)前后是没有空格的
$ git push <远程主机名> <本地分支名>:<远程分支名>
# git push origin master:master
还有几种简化形式的写法:
- 省略远程分支(多分支情况下,本人常用这种形式)
# 将本地分支推送到远程主机上的同名分支。如果远程分支不存在,则会自动创建一个远程分支。
$ git push <远程主机名> <本地分支名>
# git push origin master
- (慎用)省略本地分支(相当于删除远程分支)
# 将一个“空的本地分支”推送至远程分支,即表示删除指定的远程分支。
$ git push <远程主机名> :<远程分支名>
# git push origin :master
# 等同于
$ git push origin --delete <远程分支名>
- (不推荐)省略本地分支、远程分支
# 将当前分支推送至远程主机上的对应分支
$ git push <远程主机名>
# git push origin
这种形式要求当前本地分支和远程分支之间存在追踪关系。
怎么理解?
首先我不推荐,而且平常也不用这种形式的进行推送的。假如有存在
master
和develop
两个分支,当与远程分支建立追踪关系的是master
分支,那么处于develop
分支时,使用git push origin
形式推送至远程主机时就会提示:The current branch test has no upstream branch.
,然后再执行git push --set-upstream origin develop
即可使用这种形式的推送。
- 省略远程主机、本地分支、远程分支(本人在一些练习项目且只有一个分支时,用这种形式较多)
# 将当前分支推送至远程主机对应分支
$ git push
这种形式除了要求当前本地分支和远程分支之间存在追踪关系之外,还要求当前当前分支只有一个追踪分支。
- 省略远程分支,添加参数 -u
# 将本地分支推送到远程主机上的同名分支。如果远程分支不存在,则会自动创建一个远程分支。
$ git push -u <远程主机名> <本地分支名>
# git push -u origin master
这种形式适用于当前分支与多个主机存在追踪关系,可以利用
-u
指定一个默认的主机,这样后面就可以不加任何参数适用git push
推送对应的分支了。
六、标签操作
# 列出所有 tag
$ git tag
# 查看 tag 信息
$ git show [tag-name]
# 轻量标签
$ git tag [tag-name]
# 附注标签
$ git tag -a [tag-name] -m [message]
# 例如,打一个 v1.0.0 的标签
$ git tag -a v1.0.0 -m 'v1.0.0 release'
# 后期打标签
$ git tag -a [tag-name] [version]
# 提交指定 tag
$ git push origin [tag-name]
# 提交所有 tag
$ git push origin --tags
# 删除本地 tag
$ git tag -d [tag-name]
# 删除远程 tag
$ git push origin --detele tag [tag-name]
# 还可以向远程推送一个“空标签”,等同于删除远程标签
$ git push origin :refs/tags/<tag-name>
未完待续...
1、拷贝源代码
git clone git@git地址
cd 项目目录
2、根据已有分支创建新的分支
git checkout -b yourbranchname origin/oldbranchname
3、推送到git
git push origin yourbranchname
https://blog.csdn.net/duxing_langzi/article/details/80295573
5、 查看全部分支(包含本地和远程) :git branch -a
6、根据指定版本号创建分支: git checkout -b branchName commitId
7、清理本地无效分支(远程已删除本地没删除的分支): git fetch -p
8、如果分支太多,还可以用此命令进行分支模糊查找: git branch | grep 'branchName'
重要
git fetch & pull详解
git reflog --date=local | grep GJ-62730 当前的git分支是基于哪个分支创建的
git push origin –tags # 将本地所有标签一次性提交到git服务器
git log和git reflog可查看commitId,commitId是快照的唯一标识,二者区别?
对 Git 分支 master 和 origin/master 的一些认识