git 常用命令
创建并切换到新分支
$ git branch chunhong/recordTest //创建分支
$ git checkout chunhong/recordTest //切换到新分支
$ git branch //显示分支 粗略
$ git show-branch //显示分支 详细
将自己的分支push到远程仓库
git status
git diff samples/algo_app/src/main/jni/app_auto_recharge/AutoRechargeStateMachine.cpp
git add .
git commit -m "add datarecord loop file"
git push
使用 git push 时,有时会提示fatal the current branch xxx has no upstream branch …问题,出现上述问题,说明远程并没有感知到本地新建的这个分支,可执行
git branch --set-upstream
git push -u origin chunhong/test
即可成功建立本地与远程的关联。其中 chunhong/test 是本地新建的分支。
将自己的分支与dev合并
git checkout chunhong/recordTest //切换到自己的分支
git merge dev //与dev合并
然后在网页端查看修改的文件内容,无误后,点击continue,完成合并
获取别人新加的分支
git fetch origin //更新
git checkout 分支名 //切换分支
git pull //将远程存储库中的更改合并到当前分支中
更换远程仓库方法
当远程仓库地址改变了时,需要重新绑定仓库地址
git remote -v //查看原来的远端 如果远端原来叫orgin 则继续
git remote remove origin //删除原有的origin
git remote add origin #git 仓库地址# //添加仓库
远程分支切换
当需要在别人的远程分支上做改动时,需要拉取别人的分支,然后新建自己的分支
$ git branch //查看本地分支
$ git branch -a //查看本地及远程分支
$ git checkout -b //创建一个本地分支,并让它和远程分支进行关联 注:不用加<>
如果在运行此命令之前有文件没有提交的,而你又想取消本地文件的修改,可以先运行git chekout .
命令,然后再执行.
删除本地和远程分支
$ git branch -d //删除本地分支
$ git branch -D //强制删除本地分支
$ git push origin --delete //删除远程分支
暂存区更改
我们有时会遇到这样的情况,正在dev分支开发新功能,做到一半时有人过来反馈一个bug,让马上解决,但是新功能做到了一半你又不想提交,这时就可以使用git stash命令先把当前进度保存起来,然后切换到另一个分支去修改bug,修改完提交后,再切回dev分支,使用git stash pop来恢复之前的进度继续开发新功能。下面来看一下git stash命令的常见用法
git stash
保存当前工作进度,会把暂存区和工作区的改动保存起来。执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。使用git stash save 'message…'可以添加一些注释
git stash list //显示保存进度的列表。也就意味着,git stash命令可以多次执行。
git stash pop [–index] [stash_id]
git stash pop 恢复最新的进度到工作区。git默认会把工作区和暂存区的改动都恢复到工作区。
git stash pop --index 恢复最新的进度到工作区和暂存区。(尝试将原来暂存区的改动还恢复到暂存区)
git stash pop stash@{1}恢复指定的进度到工作区。stash_id是通过git stash list命令得到的
通过git stash pop命令恢复进度后,会删除当前进度。
git stash apply [–index] [stash_id] //除了不删除恢复的进度之外,其余和git stash pop 命令一样。
git stash drop [stash_id] / /删除一个存储的进度。如果不指定stash_id,则默认删除最新的存储进度。
git stash clear //删除所有存储的进度。
来自https://blog.csdn.net/daguanjia11/article/details/73810577?utm_source=copy
查看最近或某一次提交修改的文件列表
git log --name-status 每次修改的文件列表, 显示状态
git log --name-only 每次修改的文件列表
git log --stat 每次修改的文件列表, 及文件修改的统计
git whatchanged 每次修改的文件列表
git whatchanged --stat 每次修改的文件列表, 及文件修改的统计
git show 显示最后一次的文件改变的具体内容
git show -5 显示最后 5 次的文件改变的具体内容
git show commitid 显示某个 commitid 改变的具体内容
配置用户名和密码等
$ git config -l //列出所有配置列表
$ git config --global user.name "lichunhong" //设置git全局用户名
$ git config --unset --global user.email //移除设置
如果我们git clone
的下载代码的时候是连接的https://而不是git@git (ssh)的形式,当我们操作git pull/push
到远程的时候,总是提示我们输入账号和密码才能操作成功,频繁的输入账号和密码会很麻烦。
解决办法:进入你的项目目录,输入:
git config --global credential.helper store
然后你会在你本地生成一个文本,上边记录你的账号和密码。当然这些你可以不用关心。
然后你使用上述的命令配置好之后,再操作一次git pull,然后它会提示你输入账号密码,这一次之后就不需要再次输入密码了。
git pull命令
git pull命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并
基本用法:
git pull <远程主机名> <远程分支名>:<本地分支名>1
例如执行下面语句:
git pull origin master:brantest1
将远程主机origin的master分支拉取过来,与本地的brantest分支合并。
后面的冒号可以省略: git pull origin master1
表示将远程origin主机的master分支拉取过来和本地的当前分支进行合并。
上面的pull操作用fetch表示为:
git fetch origin master:brantest
git merge brantest12
相比起来git fetch更安全一些,因为在merge前,我们可以查看更新情况,然后再决定是否合并。
来自 https://blog.csdn.net/qq_38663729/article/details/80627248?utm_source=copy
git diff 的用法
在git提交环节,存在三大部分:working tree, index file, commit
这三大部分中:
working tree:就是你所工作在的目录,每当你在代码中进行了修改,working tree的状态就改变了。
index file:是索引文件,它是连接working tree和commit的桥梁,每当我们使用git-add命令来登记后,index file的内容就改变了,此时index file就和working tree同步了。
commit:是最后的阶段,只有commit了,我们的代码才真正进入了git仓库。我们使用git-commit就是将index file里的内容提交到commit中。
总结一下:
git diff:是查看working tree与index file的差别的。
git diff --cached:是查看index file与commit的差别的。
git diff HEAD:是查看working tree和commit的差别的。(你一定没有忘记,HEAD代表的是最近的一次commit的信息)
git reset HEAD 用法
首先需要知道工作区(working diretory)和暂存区(Stage)这两个概念。工作区的概念不仅包含你实际更改的文件还应当包括当前修改但未add存入暂存区的文件变化信息,暂存区的作用则是临时存储文件的变化信息,在git add file操作之后,暂存区中将记录file文件上的修改信息。暂存区的存在更细化了时间节点,要知道commit的往往是有重大改变的版本或者是在一次修改工作整体完成之后才使用commit。而在这之间需要保存的修改,自然需要一个缓存区暂时存放。
廖雪峰的git教程中在“撤销修改”部分中,提到了几种情景和相应的git checkout与git reset命令。通过我的思考,在这个更直接地分析这两个命令的含义。
git checkout – file;撤销对工作区修改;这个命令是以最新的存储时间节点(add和commit)为参照,覆盖工作区对应文件file;这个命令改变的是工作区
git reset HEAD – file;清空add命令向暂存区提交的关于file文件的修改(Ustage);这个命令仅改变暂存区,并不改变工作区,这意味着在无任何其他操作的情况下,工作区中的实际文件同该命令运行之前无任何改变
对照廖雪峰的git教程中相应的例子,能更好地体会上述总结。
Gitlab Github 配置SSH Key
使用git远程仓库前,需要在Gitlab或者GitHub上创建账号,并配置好SSH Key
https://blog.csdn.net/leo8729/article/details/75459549
配置好远程仓库后,我们来创建本地仓库,参考廖雪峰
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743256916071d599b3aed534aaab22a0db6c4e07fd0000
首先创建一个路径,作为本地仓库
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
初始化一个Git仓库,使用git init命令
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
添加文件到Git仓库,分两步:
(1)使用命令git add ,注意,可反复多次使用,添加多个文件;
(2)使用命令git commit -m ,完成。
$ git add readme.txt
$ git commit -m "wrote a readme file"
git status命令可以让我们时刻掌握仓库当前的状态
如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
$ git status
将远程库克隆到本地使用git clone
首先切换到文件存放地址,然后使用 git clone
cd ~/catkin_ws/src
git clone https://github.com/RobotnikAutomation/barrett_hand.git
cd barrett_hand
git checkout kinetic-devel
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash
新注册了一个gitlab账号,配置好了ssh key,然后使用git clone时,出现下列错误
$ git clone [email protected]:lichunhong/4444444.git
Cloning into 'asdasd'...
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
而git clone GitHub上的开源项目是可以的。
后来将 git clone所使用的ssh地址更换为 HTTPS地址后发现可以正常clone
[email protected]:lichunhong/4444444.git 更换为 https://git.lug.ustc.edu.cn/lichunhong/4444444.git
将本地代码上传到远程仓库
https://blog.csdn.net/u011961856/article/details/79687374
需要注意的是,这里添加的地址为HTTPS的地址
git remote add origin https://github.com/qinghua2016/test.git