整理的一些git的操作指令

使用前的一些设置

git --version                      查看版本信息

git config --global user.name “aa”              配置用户名(用户名和邮箱仅作为标识)
git config --global user.email 邮箱                 配置邮箱
git config --list                                                 查看配置结果
git config --global core.autocrlf false             让git不要管windows/unix换行符转换的问题
git config --global core.ignorecase false        windows上还需配置
git ssh key pair配置

1.ssh-keygen -t rsa -C 邮箱
2.ssh-add ~/.ssh/id_rsa                  如果出现could not open a connection...的错误先执行eval `ssh-agent`,再执行ssh-add                                                         ~/.ssh/rsa成功ssh-add –l就有新加的rsa了
3. cat ~/.ssh/id_rsa.pub                    查看公钥,没有pub后缀的是私钥(生成秘钥的位置看git窗口)


git的三个阶段:

  1. working tree:就是你所工作在的目录,每当你在代码中进行了修改,working tree的状态就改变了。
  2. index file:是索引文件,它是连接working tree和commit的桥梁,每当我们使用git-add命令来登记后,index file的内容就改变了,此时index file就和working tree同步了。
  3. commit:只有commit了,我们的代码才真正进入了git仓库。 我们使用git-commit就是将index file里的内容提交到commit中。


git add 文件名                                  把文件修改添加到暂存区

git commit -m "注释内容"               把暂存区的所有内容提交到当前分支
                                                        -ma  将add和commit两步合并为一步
git log --pretty=oneline                 显示日志,但是内容较少
git reset --hard HEAD^                 回退到当前版本的上一个版本(HEAD指针指向当前版本),回退之后要想恢复新版本,必须找到 新版本的commit id
git reset --hard commit_id             回到未来的某个版本
git reflog                                        记录每一条命令,以便确定回到未来那个版本
git log                                            查看提交历史,以便回退到那个版本
git log --graph                                分支合并图

git diff                                            查看文本区别
git diff:                                        是查看working tree(工作区)与index file(暂存区)的差别的。
git diff --cached:                        是查看index file与commit的差别的。
git diff HEAD:                             是查看working tree和commit的差别的。(HEAD代表的是最近的一次commit的信息)
git diff -w                                      消除 No newline at end of file提示,每一个文件最后一句一回车换行结束

git rm  file                                       删除文件
git checkout -- readme.txt   撤销工作区的修改(其实就是用版本库的版本替代工作区的版本,无论是修改还是删除)
(1)readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
(2)readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
总之,就是让这个文件回到最近一次git commit或git add时的状态
git reset HEAD 文件名       将提交到暂存区的修改撤回到工作区,然后再用git checkout指令丢弃工作区的更改


提交到远程仓库
git remote add origin url        连接远程仓库(origin是默认远程仓库名)
git push -u origin master        提交到远程仓库的master分支(-u 关联本地的分支和远程的分支,下次只要输入git push就行)
                                                第一次提交要加-f参数,远程库中没有此版本,需要强制提交
git remote -v                           查看远程连接
从远程仓库克隆
git clone url                          克隆远程仓库的项目到本地, 所有本地分支默认与远程主机的同名分支,建立追踪关系
git checkout -b dev             创建dev分支并切换
                                            -b参数表示创建并切换 ,该命令相当于两条命令git branch dev和git checkout dev
git branch                              查看当前分支(当前分支前会有一个*号)
git checkout 分支名              切换分支
git merge                              分支名 合并某分支到当前分支(默认使用fast forward模式,但是合并后会丢掉分支信息)
                                            --no-ff        关闭forward模式,以普通模式合并(普通模式合并后的历史有分支,能看出来做过合并)
git branch -d                         分支名 删除某分支(合并过的)
git branch -D 分支名              删除某分支(没有合并过的,该分支的所有修改就地销毁)
切换到dev分支下修改并commit,修改是保存在dev分支下,切换回master分支后,dev下提交的修改并不会生效,一旦切换到dev
分支下,才会出现修改内容
一般情况下,是在分支完成某个任务,完成后用merge命令与master合并,然后在删除分支

临时需要处理一些bug,git提供了一个stash功能,可以将当前工作现场储藏起来,等恢复工作现场后继续工作
git stash                                保存当前的工作现场
git stash list                           查看工作现场列表
git stash apply                       恢复工作现场,但是恢复后,stash内容并不删除,需要 用git stash stop来删除
git stash apply stash@{0}      指定列表中项
gti stash pop                         恢复的同时删除stash的内容

git branch  -r                           查看远程分支
git checkout –b v1.0 origin/master       生成新的分支v1.0,远程也会有v1.0分支
git push origin HEAD –u                      将分支推送到远程的同名分支(HEAD指向本地最新的提交版本)
git push origin v1.0 –u                          origin是远程主机名
git push <远程主机名> <本地分支名>:<远程分支名>   将本地分支的更新推送到远程主机

查看远程库信息,使用git remote -v;
本地新建的分支如果不推送到远程,对其他人就是不可见的;
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b <branch-name> origin/<branch-name>,本地和远程分支的名称最好一致;
建立当前分支和远程分支的追踪关系,使用 git branch --set-upstream-to=origin/远程分支名  本地分支名 (本地分支要先切换到需要连接的分支) 也可以考虑 git branch -u origin/远程分支名
git branch -vv                               本地分支与远程分支的映射关系

git branch --unset-upstream       撤销本地分支与远程分支的映射关系

多人协作的工作模式通常是这样:

  1. 首先,可以试图用git push origin <branch-name>推送自己的修改;

  2. 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

  3. 如果合并有冲突,则解决冲突,并在本地提交;

  4. 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!

                    如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to=origin/<branch-name> <branch-name>

这就是多人协作的工作模式,一旦熟悉了,就非常简单。


$ git push <远程主机名> <本地分支名>:<远程分支名>

$ git pull <远程主机名> <远程分支名>:<本地分支名>

将远程存储库中的更改合并到当前分支中。在默认模式下,git pullgit fetch后跟git merge FETCH_HEAD的缩写,使用--rebase,它运行git rebase而不是git merge

例:git pull origin next (省略了:后的本地分支名)

上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再执行git merge

$ git fetch origin
$ git merge origin/next

git fetch和git pull的区别

  1. git fetch:相当于是从远程获取最新版本到本地,不会自动合并。
$ git fetch origin master
$ git log -p master..origin/master
$ git merge origin/master
Shell

以上命令的含义:

  • 首先从远程的originmaster主分支下载最新的版本到origin/master分支上
  • 然后比较本地的master分支和origin/master分支的差别
  • 最后进行合并

上述过程其实可以用以下更清晰的方式来进行:

$ git fetch origin master:tmp
$ git diff tmp 
$ git merge tmp
在实际使用中, git fetch 更安全一些,因为在 merge 前,我们可以查看更新情况,然后再决定是否合并。


猜你喜欢

转载自blog.csdn.net/anthony_ju/article/details/80870461