git add
将工作文件修改提交到本地暂存区。
git add .
将所有修改过的工作文件提交暂存区(常用)。
git commit -m "XXX"
为本次修改打一个 tag,当然此条命令通常跟在 git add
后使用。每次 commit
都会有一个对应的 tag,当打包发布时,往往我们会打对应 tag 的版本。所以 tag 是一次有意义记录,它是和某次 git commit
绑定对应的。
git push origin branch_name
将本地 branch_name
分支推到远程 branch_name
分支。
git branch -d branch_name
删除本地分支 branch_name
(注意:删除本地分支时,当前所处分支不能是要删除的该本地分支)。
git branch -D branch_name
强制删除本地分支 branch_name
(如果 branch_name
分支当前修改的内容没有暂存,那么只有强制删除有效)。
git push origin --delete branch_name
删除服务器端分支 branch_name
。
git pull origin branch_name
拉取服务器端 branch_name
分支的内容并合并到本地 branch_name
分支(一般来说,多人共用一个分支时,如果你有需要提交到服务器的内容,则要先用此命令更新本地分支的内容,然后再将新的内容提交到服务器)。
git fetch origin branch_name
拉取服务器端 branch_name
分支的内容,但不合并。此操作一般是不确定远端代码是否存在问题,为保险起见,可先拉取到本地查看,确认无误后,和合并此代码到本地的对应分支下。
将服务器端 branch_name
分支合并到本地当前分支下。
将本地 branch_name 分支合并到本地当前分支下。
如果本地没有 branch_name
分支,想要基于服务器端 branch_name
分支创建一个,但又不想影响到本地的当前分支。可以使用此命令进行本地 branch_name
分支的创建。
git branch
查看本地存在分支。
git branch -a
查看所有本地关联到的分支(远端分支也能打印出来,但是关联如果没有建立,那么是不会显示的,此时我们可以使用 git fetch
拉下来所有分支。)。
git status
查看当前分支的状态,一般合并分支代码后,用于检查是否有冲突。
git reset --hard
回退到 commit id
提交的版本,仅对已经 commit
到本地的代码有效
git checkout
该命令是对未提交到缓存区的代码进行撤销。例如本地修改代码之后,在没有执行 git add 命令之前又想撤销操作,可以执行该命令。
git reset HEAD --
该命令是将放入暂存区的代码进行撤销,放入到工作区中。
git config user.name "提交者的名称"
配置当前仓库下提交者的名称。
git config user.email "邮箱"
配置当前仓库下提交者的邮箱。
git config --global user.name "用户名"
配置全局提交者的名称。
git config --global user.email "邮箱"
配置全局提交者的邮箱。
git config --global --list
查看我们的配置
git merge
和 git rebase
使用场景
git merge
一般用于新功能的开发和 bug 修复;git rebase
在主分支上进行开发,或者 Pull 的冲突解决;git merge
主要是在主分支上进行使用,而 git rebase 是在从分支上进行使用。git merge
和 git rebase
区别:
git merge
会生成新的 commit
,而 git rebase
不会生成新的 commit
,会保留比较完整的提交历史。git merge
是按照时间顺序进行合并,而 git rebase
是将 主分支顺序不变,插入到从分支的前端。git rebase
注意事项: 如果分支已经 Push
到了远程仓库就不要对该分支进行 git rebase
操作。如果已经提交到了远程分支再进行 Push
的时候容易出现冲突,我们可以采用 git push --force
,但是最好是永远不要使用这个命令。
git remote add branch_alias(别名) http://github.com/ccod_project/dcmsstatics4-5git.git
git remote -v
git remote show branch_alias
git remote rename demo test
git remote rm test
注:由于远程库是空的,我们第一次推送 master
分支时,加上了 -u
参数, git
不但会把本地的 master
分支内容推送到远程新的 master
分支,还会把本地的 master
分支和远程的 master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
之后,只要本地作了提交,就可以通过命令把本地 master
分支的最新修改推送至 github
git push branch_alias master
git fetch origin develop --- 只是获取远程仓库的数据至 .git 目录,并未merge本地
git merge origin/develop --- 把获取的远程仓库的数据手工merge至当前分支
git pull origin develop ---- 获取远程仓库的数据,并自动merge至当前的分支,相当于以上两步
在 git
中,用 HEAD
表示当前版本,也就是最新的提交 commit id
,上一个版本就是 HEAD^
,上上一个版本就是 HEAD^^
,当然往上 100 个版本写 100 个 ^ 比较容易数不过来,所以写成 HEAD~100
。
git reset --hard HEAD^
git reset --hard HEAD^^
git reset --hard HEAD~N(N 是一个整数)
git reset ––hard 版本号
git checkout -- file
正确操作:git rm file git commit -m “remove file”(文件被删除)
操作失误:git checkout -- file(文件被恢复)
git branch (-a)
git branch develop(只是新建了一条分支,并未切换)
git checkout develop
git checkout -b feature(相当于3.10和3.11两步操作)
git branch -d feature(注意:不能删除当前所在分支)
git checkout develop && git merge feature(把feature分支合并到develop分支)
注:
因为我们创建 git
版本库时, git
自动为我们创建了唯一一个 master
分支, 所以默认 git commit
就是往 master
分支上提交更改。
如果要丢弃一个没有被合并过的分支,可以通过 git branch -D
强行删除。
建立本地分支和远程分支的关联,使用 git branch --set-upstream branch-name origin/branch-name
;
汇总:
查看分支:git branch,git branch -r 查看远程服务器上有多少个分支
创建分支:git branch 分支名称(Develop)
切换分支:git checkout 分支名称(Master)
合并分支:git merge 分支名称
删除分支:git branch -d 分支名称(删除本地分支),git push origin --delete 分支名称 (删除远程服务器的分支)
git branch 分支的名称 创建新的分支
git branch 分支名称 commitId 在指定 commitId 基础上创建分支
git checkout 分支的名称 切换分支
git checkout -b 分支的名称 创建新的分支并切换到该分支上
git checkout -b 分支名称 commitId 在指定 commitId 基础上创建分支并切换到该分支
git branch 查看本地所有的分支
git branch -a 查看本地和远程所有的分支。
git branch -m 原来的名称 新的名称 修改分支的名称
修改远程仓库分支的名称
修改远程分支的名称需要我们先将远程分支删除。
然后修改本地分支名称。最后将本地分支名称提交到远程仓库。
git push origin 分支名称 将分支推送到远程仓库中。
git branch -d 分支名称 删除本地仓库分支
git push origin --delete 分支名称 删除远程仓库分支。
git log 查看当前分支所有提交历史记录。
git log --all 查看所有分支的提交历史记录
git log --oneline 查看简洁提交历史记录
git reflog 查看所有分支的所有操作记录 (包括被删除的commit 操作记录)后面会介绍到。
git log -n2 查看最近2次提交的历史记录
git log -p -2 最近两次提交差异显示
git log --pretty=oneline 查看简洁提交历史记录
git rm + git mv 命令介绍
git rm 文件名称 从工作目录中删除该文件并且本地不保留。
git rm --cached 文件名称 从版本控制中删除该文件,但在本地保留该文件(相当于将文件从暂存区撤销到工作区中)
git mv 原来名称 新的名称 更改文件名并提交到本地仓库 (暂存区和本地仓库文件)本地仓库需要再次执行 commit 提交。
你可能觉得 Git 命令这么多,记不住啊。没事,学会下面 3 个命令,快速帮你进行回忆操作。
git help
展示经常使用命令的介绍。
git help 具体操作命令
对具体命令操作的介绍 会打开默认游览器进行查看具体命令介绍。
git 具体操作命令 -h
对具体命令操作的介绍 例如 git commit -h ,git add -h。
当你完成工作将文件提交到工作区或者暂存区甚至本地仓库后,你才发现提交的内容有问题。当你抓耳挠腮想着"怎么办,怎么办”的时候,不如看看下面命令,也许会帮助到你哦。
git chekout --文件名称 将工作区的文件撤销到缓存区中(前提是该文件已经执行过 git add 操作。)
git reset 文件名称 或 git reset HEAD 文件名称 将暂存区的代码撤销到工作区中。
git reset --hard 要切换 commit 的记录id 丢弃所有历史记录并将更改返回到指定的提交历史上
git reset --hard 执行的时候是比较危险的,它的危险之处是如果你的文件还未 commit 执行 git reset --hard 可能导致文件无法进行恢复的。如果已经 commit 我们可以通过 reflog 来找回它。
下面还有3个比较有意思的命令:
git reset --soft HEAD^:将最新的提交的记录还原到到暂存区
git reset --mixed HEAD^:将最新的提交的记录还原到工作区
git reset --hard HEAD^:将最新的提交的记录全部清除
git diff --cached | git diff --stage 暂存区和最新提交内容比较
git diff --文件名 工作区和暂存区内容的比较。
git diff commitId1 commitId2 --文件名 查看不同历史提交文件内容的不同
git diff 分支1名称 分支2名称 比较分支1 和分支2 提交文件内容的不同。
git push 将本地分支的更新推送到远程仓库中。
git fetch 从远程仓库中获取最新的内容 但是不会执行合并的操作(git merge)
git pull 从远程仓库中获取最新内容并且合并到本地仓库中,相当于 git merge + git fetch 的操作
git merge <branch name>
git merge 一般我们都是主分支合并从分支比较多。
和 git merge 的操作方式是一样的,不过一般 git rebae 主要是用来将主分支合并到从分支的操作中比较常见。后面我们会介绍 git merge 和 git rebase的区别。
git rebase 和 git merge 的区别
git merge 和 git rebase 使用场景:
git rebase 注意事项:
如果分支已经 Push 到了远程仓库就不要对该分支进行 git rebase 操作。如果已经提交到了远程分支再进行 Push 的时候容易出现冲突,我们可以采用 git push --force,但是最好是永远不要使用这个命令。
Git 标签分为 2 种。
轻量标签(lightweight)
轻量标签 一般是用于临时的标签 ,轻量标签仅仅记录了commit 的信息。
附注标签(annotated)
附注标签 记录的信息更为详细 它包含了创建标签的作者 创建日期 以及标签信息。一般建议创建附注标签。
Git 标签操作命令介绍
git tag 标签名称 创建轻量标签
**git tag -a 标签名称 -m '标签注释' ** 创建附注标签,一般建议使用附注标签。
git tag -a commitId 指定 commitId 创建标签
git tag 和 git tag --list | git tag -l 查看所有的标签。
git tag -l 'v*.0' 查看以 v 开头和以 0 结尾的所有的标签
git show 标签的名称 查看标签的具体信息
git ls-remote --tags 查看远程仓库的标签列表
git push origin 标签名称 将标签推送到远程仓库中。
git push origin --tags 提交本地所有的标签到远程仓库
git tag -d 标签名称 删除该标签
git push origin :refs/tags/标签名称 删除远程仓库的标签。
这个命令之切换不同的历史记录,危险之处在于如果添加的工作内容没有执行 commit,执行 git reset —hard,那么这些没有 commit 的工作内容有可能丢失。
git rebase -i git commit --amend 和 git rebase -i 都可以用来修改我们的 commit 并不会产生新的 commit,但是这个修改操作必须是在你还没有推送远程仓库前去执行。因为通过这2个命令进行修改虽然不会产生新的 commit,但是我们的 commitId 会发生变化,我们在推送的时候会报Note about fast-forwards,如果想将你的修改推送只能使用强制推送 git push -f 操作,这样会强制将你的历史版本覆盖到远程仓库。当然别人的提交历史也会被覆盖掉。
上面我们已经说了 执行该操作会强行将自己本地仓库历史版本覆盖到远程仓库的历史版本。这样别人提交的历史版本信息会丢失掉。
我这里所说的最好不要使用也不是很绝对哈,危险命令的危险在于你不了解它的危害就胡乱操作。当我们知道它们的注意事项,这些危险命令有时候对我们是有利的。例如我们创建了几个提交并且没有将其提交到远程仓库,我们完全可使用 git reset --hard 将我们不像要的 commit 丢弃掉,可以通过 git commit —amend 和 git rebase -i 对我们已提交的 commit 进行修改。但是 git push 这个操作是千万不要执行的。
文章参考来源:
https://gitbook.cn/books/5cb7dc185e228a2b9d502831/index.html