git 常用的使用总结

对一个已存在的远程仓库进行 clone 和提交代码操作

clone 代码

$ git clone [-b branchName] 远程地址 [filefolder name]

-b 代表 clone 某个分支,后面跟分支的名称。代码 clone 到本地后,当前路径会多一个与 git 远程项目名相同的文件夹 (手工指定文件夹名除外).

$ cd 文件夹名

提交代码:

$ git status // 查看当前工作目录的状态

$ git add . 或 git add -u 或 git add -A (git add –all 的缩写) // 添加要提交的文件到 git 暂存区。相关区别:三条命令对应的 git 版本不一样也有区别.

git1.x 版本

git2.x 版本

使用 2.x 以上版本的 git 使用 - a 和。是一样的。本人通常使用。更加方便快捷

$ git status // 添加文件到暂存区后再次查看确保文件的状态

$ git commit -m “注释”

$ git remote -v // 查看当前已经存在的 git 远程 url

$ git push -u 远程名称 本地要提交的分支:远程分支 // 远程分支不存在的时候会自动在远程创建该名称分支

已有代码在用户本地,远程不存在的情况

$ cd existing_folder

$ git init

$ git status

$ git remote add origin git@code.aliyun.com:baz/foo.git

$ git add .

$ git status

$ git commit -m “注释”

$ git push -u origin master:master // 提交本地 master 到远程 master

对远程初始化仓库有 git history, 本地代码也有 git history 的情况

针对远程本地都有 git 提交的情况,比较特殊。比如阿里云 code 上面新建项目必须选择对应的模板,会进行对仓库初始化操作。而本地存在之前的项目 (已经含有 git 记录,比如 gitlab,coding 之类的). 推荐方式:先从远程 clone 下来。然后删除 clone 下来的文件夹下的文件 (.git 目录除外). 然后 commit->push 提交到远程

1. 删除远程仓库不需要的文件

$ git clone alicodeurl xxx

$ cd xxx

// 去资源文件管理器中手动删除除.git 目录外的其他文件. linux/osx 也可 cd 目录再 rm 删除

$ git status

$ git add .

$ git status

$ git commit -m “注释”

$ git push -u origin master:master // 提交本地 master 到远程 master

2. 对本地项目进行提交到远程

$ cd project filefolder

$ git remote add origin git@code.aliyun.com:baz/foo.git

$ git pull origin master –allow-unrelated-histories // 会弹出 merge 的编辑器,删除或者增加内容后退出

$ git add .

$ git commit -m “注释”

$ git push -u origin master:master // 提交本地 master 到远程 master

项目开发中的分支使用

切换分支

$ git checkout 分支名称

创建分支 dev

$ git checkout -b dev // 创建并进入到分支,git branch 可查看当前分支指针状态

约定在 Dev 分支上面进行编码开发。上述的所有提交代码命令必须在 dev 分支上执行,最后的一句 git push 换成以下命令

$ git push -u origin dev:dev // 提交本地 dev 到远程 dev. 第一次远程无 dev 会自动创建 dev

更新远程分支代码到本地:

$ git fetch origin dev //fetch 远程 dev 分支代码 .. 避免使用 pull

在当前分支合并 fetch 下面的代码

$ git merge origin/dev // 合并从远程 dev 分支 fetch 下来的代码

注意

版本正式上线后,需要将 dev 分支发布到 Master 分支。采用以下命令:

$ git checkout master // 切换到 Master 分支

$ git merge –no-ff dev // 对 Dev 分支进行合并

使用–no-ff 参数后,会执行正常合并,在 Master 分支上生成一个新节点。为了保证版本演进的清晰,推荐采用这种做法

Git4 个阶段的撤销操作

了解 git 阶段首选理解 git 的几个区:

工作区 (working area),

暂存区 (stage),

本地仓库 (local repository),

远程仓库 (remote repository).

每将文件存到不同的区的时候会产生一个状态,在加上最开始的一个状态总共 5 个状态.

未修改 (Origin)

已修改 (Modified)

已暂存 (Staged)

已提交 (Committed)

已推送 (Pushed)

1. 文件处于已修改的状态,即修改过文件。未暂存 (add)

文件已修改,恢复到初始状态 (未做任何修改状态)

$git checkout . 或者 $git reset –hard origin/dev // 恢复到与远程 dev 保持一致的状态,相当于刚 clone dev 的状态

2. 文件处于已暂存 (stage), 未提交 (commit)

文件已经进行过 git add . 操作,但是还未进行 git commit 操作

$git reset // 恢复到已修改的状态

$git checkout . // 继续执行这条,就恢复到初始状态 (未做任何修改状态)

如果要实现恢复到初始状态 (未做任何修改状态), 除了通过执行上面 2 步命令外,也可一直接执行下面这句,一步恢复到初始状态

$git reset –hard // 一步到初始状态

3. 文件处于已提交 (commit), 未推送 (push)

这种情况下,代表已经提交到本地仓库了,既然已经污染了你的本地仓库,那么就从远程仓库把代码取回来吧。恢复到初始状态了,

$git reset –hard origin/dev // 直接恢复到初始化状态,但已做的修改全部会丢失

4. 文件处于已推送 (push)

既 git add 了,又 git commit 了,并且还 git push 了,这时代码已经进入远程仓库。如果想恢复的话。由于本地仓库和远程仓库是等价的,只需要先恢复本地仓库,再强制 push 到远程仓库就好了

$git reset –hard HEAD^ // 将本地恢复到初始状态,之前已做的修改全部会丢失

$git push -f // 将本地仓库初始化后推送到远程,将远程保持和本地一致

注:只要还未影响到本地仓库 (local repository) 的时候,即没有 commit 时,都可以恢复到已修改的状态。一旦 commit 后,影响了本地仓库,就只能恢复到上一次的本地仓库的版本。所做的修改都会丢失..

###git 撤销暂存区的文件

有时候执行 git add . 后,将当前目录下的所有改动文件都添加到了暂存区,此时如果有三两个文件是不需要添加进暂存区的,可以执行以下命令将文件从暂存区移除
$git rm –cached 文件名

git tag 的常用使用

Git 可以对某个版本打上标签 (tag),表示本版本为发行版

$git tag // 查看所有标签

$git tag -l 1.0.* // 打印符合检索条件的标签

$git checkout 1.0.0 // 查看对应标签状态

$git tag -a 1.0.0 -m “1.0.0 版本” // 创建带备注标签 (推荐)

$git tag -a 1.0.0 0c3b62d -m “备注信息” // 针对特定 commit 版本 SHA 创建标签

$git tag -d 1.0.0 // 删除本地 1.0.0 标签

$git push origin –tags // 将本地所有标签发布到远程仓库

$git push origin 1.0.0 // 指定标签版本 (1.0.0) 发送

$git push origin –delete 1.0.0 // 删除远程仓库对应标签,此命令需要 Git 版本 > V1.7.0

$git push origin :refs/tags/1.0.0 // 删除远程仓库对应标签,此命令需要 Git 版本 < V1.7.0