Git 操作整理笔记

初始安装、添加至暂存区、提交到版本库

$ git
#查看是否安装了git
$ git config --global user.name "XXX"
$ git config --global user.email "[email protected]"
#配置全局git库的用户信息
$ git init
#当前目录下创建空的git仓库
ls -ah 
#查看隐藏目录  .git版本库等

丢弃暂存区更改、丢弃工作区更改

$ git checkout -- [filename]
#或者 
$ git resotre [filename]
#恢复指定文件到上一次commit或者上一次add时的状态
#该命令也可以用来恢复误删的文件
#总之,git checkout其实是用版本库里的版本替换工作区的版#本,无论工作区是修改还是删除,都可以“一键还原”。
$ git checkout HEAD [filename]
#或者
$ git restore --staged [filename]
#将文件在暂存区的修改放回到工作区内
#然后再使用git checkout -- [文件名]将工作区的修改丢弃

版本回退

$ git add -A . 
#当前目录文件改动全部添加到本地库暂存区
$ git commit -m "说明信息"
#将暂存区的文件提交到本地库
$ git status
#查看仓库当前状态
$ git diff 文件名 
#查看指定的文件改动
$ git log
#查看提交记录
$ git log --pretty=online
#简要的提交记录
$ git reset --hard HEAD^
#回退到上一个版本 (HEAD^^上两个版本... HEAD~100上100个版本)

如果记不清到底是前几次提交的了,可以通过reflog查看commitid,然后恢复到指定的版本

$ git reset --hard ‘版本号(不用全部,部分即可)’
#按commitid回退版本
$ git reflog
#查看命令记录,可以用来回退到之前的最新版本

连接远程仓库

#Git Base下:
$ ssh-keygen -t rsa -C "[email protected]"
#创建SSH Key
#本地仓库关联远程仓库
$ git remote add origin [email protected]:[you github account name]/[product name].git
#添加后 远程仓库的名字就是origin
#本地推送提交的信息到远程仓库
$ git push -u origin master
#由于远程仓库是空的,我们第一次推送master分支时,加上-u参数,git不但会把本地的master分支内容推送到远程新的master分支,还会把本地master分支和远程master分支关联起来,在以后的推送和拉取时可以简化命令
#之后将可以使用 git push  代替  git push origin master
#从远程仓库克隆项目到本地
$ git clone [email protected]:[you github account name]/[product name].git

使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https。

分支创建、切换、合并、强制删除

$ git checkout -b [新分支名]
#创建新分支并切换
$ git branch [新分支名]
#创建分支
$ git checkout [分支名]
#切换分支
$ git branch
#查看分支信息(*代表当前分支)
$ git merge [分支名]
#合并目标分支到当前分支上
$ git branch -d [分支名]
#删除分支

######新版本支持switch操作分支
分支切换为了避免与checkout关键字其他功能混淆,可以使用switch代替checkout

$ git switch -c [新分支名]
#创建并切换分支
$ git switch [分支名]
直接切换到已有分支

使用新的git switch命令,比checkout要更容易理解

$ git log --graph --pretty=oneline --abbrev-commit
查看分支合并情况
$ git merge --no-ff -m "提交信息" [分支]
#合并分支并创建一次提交记录,可在提交记录上查看到merge信息

合并分支时,加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

########
如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。

远程分支

$ git branch -a
#查看远程分支列表
#如果查看不到想要分支,试试 
$ git pull
#再
$ git branch -a
#删除远程分支
git push origin --delete <branchName>

临时存储工作区变更、批量分支更改

$ git stash
#将当前工作区的工作现场记录下来,便于切换分支,并且可以随时将其恢复
$ git stash list
#查看stash记录列表
$ git stash pop
#恢复stash中的最新记录并删除掉该记录
$ git stash apply
#恢复stash中的最新记录,但不删除该记录
$ git stash apply/pop [记录的标题,例如stash@{0}]
#恢复指定的记录

#######
如果两个分支中含有相同的bug,修复了其中一个并提交之后,需要将这次改动复制到另一个分支上
需要使用cherry-pick命令
$ git cherry-pick [提交时的id]

小结
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场;

在master分支上修复的bug,想要合并到当前dev分支,可以用git cherry-pick 命令,把bug提交的修改“复制”到当前分支,避免重复劳动。

分支远程推送、提交时冲突解决

推送分支
推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:

$ git push origin master
#将本地master分支推送到远程上

如果要推送其他分支,比如dev,就改成:

$ git push origin dev

#######
push推送时出现问题时,需要先将代码pull下来,解决冲突后再push上去

当直接使用$ git pull时去拉代码时,会报错
There is no tracking information for the current branch.
Please specify which branch you want to merge with.

解决办法一种是提供详细分支参数
$ git pull <remote> <branch>
#或者将当前分支关联到远程分支
$ git branch --set-upstream-to=origin/<branch> dev
#指定本地dev分支与远程origin/dev分支的链接
$ git branch --set-upstream-to=origin/dev dev

将持续更新…

发布了27 篇原创文章 · 获赞 27 · 访问量 4267

猜你喜欢

转载自blog.csdn.net/qq_41788977/article/details/104271206