将git与码云连接起来
注册码云,下载git安装
设置码云的SSH公钥
生成SSH公钥命令
打开GIT Bash
ssh-keygen -t rsa -C "1390811049@qq.com"
# Generating public/private rsa key pair...
# 三次回车即可生成 ssh key
你的C:\Users\admin.ssh这个路径下会生成两个文件:id_rsa和id_rsa.pub
将id_rsa.pub中的内容拷贝到码云的SSH公钥中
使用 ssh -T git@gitee.com
测试是否成功
$ ssh -T git@gitee.com
Hi 南宫封清! You’ve successfully authenticated, but GITEE.COM does not provide shell access.
说明已经成功
配置git
打开你要放置项目的本地路径,右键选择$ Git Bash Here。
初始化用户名: git config --global user.name "用户名"
用户名修改为自己的用户名。
初始化邮箱: git config --global user.email "邮箱地址"
。
注:如果用户名或邮箱输入错误需要重置,使用以下命令修改:
git config --global --replace-all user.name "用户名"
git config --global --replace-all user.email "邮箱地址"
获取当前登陆用户:
git config user.name //获取当前登录的用户
git config user.email //获取当前登录用户的邮箱
使用git
一般有2种方式,一种是在码云上创建然后克隆到本地进行开发,本地已经有代码然后在码云创建仓库之后进行关联
本地已经有代码,在码云上创建仓库并上传
本地创建仓库
在本地代码目录右击 Git Bash Here
通过git init命令把这个目录变成Git可以管理的仓库
git init
#Initialized empty Git repository in G:/C++ Demo/ActiveDemo/.git/
可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的
新建一个readme.txt文件
用命令git add
告诉Git,把文件添加到仓库
用命令git commit告诉Git,把文件提交到仓库
git commit -m "add readme.txt"
[master (root-commit) 25d5603] add readme.txt
1 file changed, 1 insertion(+)
create mode 100644 readme.txt
简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录
为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件
在码云上创建一个仓库
添加远程仓库 origin
git remote add origin git@gitee.com:nangongyuan/active-mqfirst-demo.git
git remote add 远程仓库名称 远程仓库地址
添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库
注意 git@gitee.com:nangongyuan/active-mqfirst-demo.git 这个地址是ssh的地址,不要拷贝https的地址或者别的,错误了可以使用 git remote remove origin
删除重新添加 git remote get-url origin
可以查询远程仓库的地址
下一步,就可以把本地库的所有内容推送到远程库上
git push -u origin master
把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程
由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
如果报错
error: failed to push some refs to ‘gitee.com:nangongyuan/active-mqfirst-demo.git’
我们需要先将远程代码库中的任何文件先pull到本地代码库中,才能push新的代码到github代码库中
使用如下命令:git pull --rebase origin master
从现在起,只要本地作了提交,就可以通过命令
git push origin master
本地master分支的最新修改推送至远程仓库
先在远程创建然后clone到本地
git命令
git add
git add命令将文件内容添加到索引(将修改添加到暂存区)。也就是将要提交的文件的信息添加到索引库中。
git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p]
[--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]]
[--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing]
[--chmod=(+|-)x] [--] [<pathspec>…]
此命令将要提交的文件的信息添加到索引库中(将修改添加到暂存区),以准备为下一次提交分段的内容。 它通常将现有路径的当前内容作为一个整体添加,但是通过一些选项,它也可以用于添加内容,只对所应用的工作树文件进行一些更改,或删除工作树中不存在的路径了。
“索引”保存工作树内容的快照,并且将该快照作为下一个提交的内容。 因此,在对工作树进行任何更改之后,并且在运行git commit命令之前,必须使用git add命令将任何新的或修改的文件添加到索引。
该命令可以在提交之前多次执行。它只在运行git add命令时添加指定文件的内容; 如果希望随后的更改包含在下一个提交中,那么必须再次运行git add将新的内容添加到索引。
git status命令可用于获取哪些文件具有为下一次提交分段的更改的摘要。
默认情况下,git add命令不会添加忽略的文件。 如果在命令行上显式指定了任何忽略的文件,git add命令都将失败,并显示一个忽略的文件列表。由Git执行的目录递归或文件名遍历所导致的忽略文件将被默认忽略。 git add命令可以用-f(force)选项添加被忽略的文件
git add documentation/*.txt #添加documentation目录及其子目录下所有*.txt文件的内容
git add git-*.sh #将所有 git-*.sh 脚本内容添加
git add . # 将所有修改添加到暂存区
git add * # Ant风格添加修改
git add Hello* # 将所有以Hello开头的文件的修改添加到暂存区 例如:HelloWorld.txt,Hello.java,HelloGit.txt ...
git add Hello? # 将以Hello开头后面只有一位的文件的修改提交到暂存区 例如:Hello1.txt,HelloA.java 如果是HelloGit.txt或者Hello.java是不会被添加的
git add -u [<path>]
: 把
git add -A
: []表示把中所有跟踪文件中被修改过或已删除文件和所有未跟踪的文件信息添加到索引库。省略
git add -i
我们可以通过git add -i [
git commit
git commit命令用于将更改记录(提交)到存储库。将索引的当前内容与描述更改的用户和日志消息一起存储在新的提交中
git commit [-a | --interactive | --patch] [-s] [-v] [-u<mode>] [--amend]
[--dry-run] [(-c | -C | --fixup | --squash) <commit>]
[-F <file> | -m <msg>] [--reset-author] [--allow-empty]
[--allow-empty-message] [--no-verify] [-e] [--author=<author>]
[--date=<date>] [--cleanup=<mode>] [--[no-]status]
[-i | -o] [-S[<keyid>]] [--] [<file>…]
git commit命令将索引的当前内容与描述更改的用户和日志消息一起存储在新的提交中。
要添加的内容可以通过以下几种方式指定:
在使用git commit命令之前,通过使用git add对索引进行递增的“添加”更改(注意:修改后的文件的状态必须为“added”);通过使用git rm从工作树和索引中删除文件,再次使用git commit命令;通过将文件作为参数列出到git commit命令(不使用–interactive或–patch选项),在这种情况下,提交将忽略索引中分段的更改,而是记录列出的文件的当前内容(必须已知到Git的内容) ;通过使用带有-a选项的git commit命令来自动从所有已知文件(即所有已经在索引中列出的文件)中添加“更改”,并自动从已从工作树中删除索引中的“rm”文件 ,然后执行实际提交;通过使用–interactive或–patch选项与git commit命令一起确定除了索引中的内容之外哪些文件或hunks应该是提交的一部分,然后才能完成操作。
–dry-run选项可用于通过提供相同的参数集(选项和路径)来获取上一个任何内容包含的下一个提交的摘要。
如果您提交,然后立即发现错误,可以使用 git reset 命令恢复
$ git commit -m "the commit message" #提交并添加注释
$ git commit -a # 会先把所有已经track的文件的改动`git add`进来,然后提交(有点像svn的一次提交,不用先暂存)。对于没有track的文件,还是需要执行`git add <file>` 命令。
$ git commit --amend # 增补提交,会使用与当前提交节点相同的父节点进行一次新的提交,旧的提交将会被取消。
git push
git push命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相似
git push <远程主机名> <本地分支名>:<远程分支名>
git push [--all | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run] [--receive-pack=<git-receive-pack>]
[--repo=<repository>] [-f | --force] [-d | --delete] [--prune] [-v | --verbose]
[-u | --set-upstream] [--push-option=<string>]
[--[no-]signed|--sign=(true|false|if-asked)]
[--force-with-lease[=<refname>[:<expect>]]]
[--no-verify] [<repository> [<refspec>…]]
使用本地引用更新远程引用,同时发送完成给定引用所需的对象。可以在每次推入存储库时,通过在那里设置挂钩触发一些事件。
当命令行不指定使用参数推送的位置时,将查询当前分支的branch.*.remote配置以确定要在哪里推送。 如果配置丢失,则默认为origin
git push origin master #将本地的master分支推送到origin主机的master分支。如果master不存在,则会被新建
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支
$ git push origin :master
# 等同于
$ git push origin --delete master
上面命令表示删除origin主机的master分支。如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略
git push origin
上面命令表示,将当前分支推送到origin主机的对应分支。如果当前分支只有一个追踪分支,那么主机名都可以省略 git push
git push -u origin master
如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push
上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push
了
删除远程分支
git push origin --delete client-li
git checkout
切换到已有分支
git checkout release-1.0
基于当前分支创建并切换到一个新的分支
git checkout -b release-1.0-temp
基于远程分支创建并切换到新的分支
git checkout -b release-1.0 origin/release-1.0
git branch
删除本地分支
git branch -D release-1.0
查看本地分支列表
git branch
查看远程分支列表
git branch -r
查看所有分支列表
git branch -a
git pull
更新本地代码
git pull
git rebase
比如公司用release分支来开发,我本地写代码在自己的release-li分支,现在我的代码要merge到release分支,但是我本地的release-li分支是1号创建的,现在已经5号了,2号到4号之间已经有同事上传代码到了release分支,所以理想的效果是,我写的代码要在同事写的代码后面,这就用到了rebase
- 先把release-li分支的代码commit
- 切换到release分支 git checkout release
- 更新代码 git pull
- 切回release-li分支 git checkout release-li
- rebase到release-li分支 git rebase release
- 提示有冲突就先解决冲突,没有冲突就完成了
- 冲突解决之后 git rebase --continue
git cherry-pick
git cherry-pick命令的作用,就是将指定的提交(commit)应用于其他分支。
git cherry-pick <commitHash>
上面命令就会将指定的提交commitHash,应用于当前分支。这会在当前分支产生一个新的提交,当然它们的哈希值会不一样。
如果操作过程中发生代码冲突,Cherry pick 会停下来,让用户决定如何继续操作。
(1)–continue
用户解决代码冲突后,第一步将修改的文件重新加入暂存区(git add .),第二步使用下面的命令,让 Cherry pick 过程继续执行。
git cherry-pick --continue
(2)–abort
发生代码冲突后,放弃合并,回到操作前的样子。
(3)–quit
发生代码冲突后,退出 Cherry pick,但是不回到操作前的样子。
git merge
开发分支(dev)上的代码达到上线的标准后,要合并到 master 分支
git checkout dev
git pull
git checkout master
git merge dev
git push -u origin master
git reset
执行完commit后,想撤回commit,怎么办?
git reset --soft HEAD^
这样就成功的撤销了你的commit
注意,仅仅是撤回commit操作,您写的代码仍然保留。
HEAD^的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2
git reset --soft HEAD~2
–mixed
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。
–soft
不删除工作空间改动代码,撤销commit,不撤销git add .
–hard
删除工作空间改动代码,撤销commit,撤销git add .
注意完成这个操作后,就恢复到了上一次的commit状态。
实用技巧
返回到某个节点,不保留修改
git reset --hard HASH
删除当前目录下没有被track过的文件和文件夹
git clean -df
放弃本地所有修改
git reset --hard
git clean -df
查看每个分支的创建时间和创建人
git for-each-ref --format='%(color:cyan)%(authordate:format:%m/%d/%Y %I:%M %p) %(align:25,left)%(color:yellow)%(authorname)%(end) %(color:reset)%(refname:strip=3)' --sort=authordate refs/remotes