常用git命令
git checkout
- 切换分支:不同分支的切换
git checkout [分支名]
例如:git checkout dev
- 文件覆盖:放弃某一文件的全部修改,使用远程分支上的文件直接覆盖
git checkout -- [文件名]
例如:git checkout -- text.txt
注意:--后面有一个空格
git checkout
- 合并分支:需先切换到目标分支,再进行合并
git checkout [合并的目标分支]
git merge [需合并的分支]
例如:将test分支上的内容合并到dev上
git checkout dev
git merge test
git stash
- 暂存分支代码:
应用场景:在test分支开发了一半功能后,临时要切换到dev分支上修改代码,用于暂存test分支上,已经git add且暂未git commit的文件
暂存三个步骤:
1.查看及确认哪些文件需要暂存
git status
2.确认后暂存文件
git stash
3.暂存后查看暂存列表,确认好已经暂存,确认好之后就可以切换分支
git stash list
取出暂存文件的几个方法:
1.如果你的暂存列表只有一个暂存信息,可使用以下代码取出最近暂存的内容(注意git stash pop 后,会把对应的暂存信息从 git stash list列表中移除)
git stash pop
2.根据git stash list中记录的id信息取出对应暂存信息,(注意git stash apply 不会将暂存信息从git stash list 中删除)
git stash list
会显示stash@{0}: WIP on master: d273904 m等信息,其中,这个d273904,就是这个暂存信息的id
git stash apply stash@{暂存信息的id}
注意事项:
1、取出暂存信息时,不能有已经git add且未git commit的文件,如果有的话会进行提示
2、取出暂存信息时,注意对应好分支
流程:(源自百度)
1.使用git status指令查看当前文件状态。
2.然后,使用指令git stash 将文件修改缓存。
3.使用git status指令确认当前分支没有修改内容。
4.使用指令git stash list,查看当前缓存列表。
5.使用指令git stash apply stash@{id},恢复指令ID的缓存内容,并且保留缓存条目。
6.使用git stash pop 恢复最新的stash,同时删除恢复的缓存条目
git reset
引用网上查找的资料说明一下使用的几种模式和差别
git reset四种模式区别和使用场景
区别:
–hard:重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。
–soft:重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。
–mixed(默认):重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。
使用场景:
–hard:(1) 要放弃目前本地的所有改变時,即去掉所有add到暂存区的文件和工作区的文件,可以执行 git reset -hard HEAD 来强制恢复git管理的文件夹的內容及状态;(2) 真的想抛弃目标节点后的所有commit(可能觉得目标节点到原节点之间的commit提交都是错了,之前所有的commit有问题)。
–soft:原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files),所以假如我们之前工作目录没有改过任何文件,也没add到暂存区,那么使用reset --soft后,我们可以直接执行 git commit 將 index暂存区中的內容提交至 repository 中。为什么要这样呢?这样做的使用场景是:假如我们想合并「当前节点」与「reset目标节点」之间不具太大意义的 commit 记录(可能是阶段性地频繁提交,就是开发一个功能的时候,改或者增加一个文件的时候就commit,这样做导致一个完整的功能可能会好多个commit点,这时假如你需要把这些commit整合成一个commit的时候)時,可以考虑使用reset --soft来让 commit 演进线图较为清晰。总而言之,可以使用–soft合并commit节点。
–mixed(默认):(1)使用完reset --mixed后,我們可以直接执行 git add 将這些改变果的文件內容加入 index 暂存区中,再执行 git commit 将 Index暂存区 中的內容提交至Repository中,这样一样可以达到合并commit节点的效果(与上面–soft合并commit节点差不多,只是多了git add添加到暂存区的操作);(2)移除所有Index暂存区中准备要提交的文件(Staged files),我们可以执行 git reset HEAD 来 Unstage 所有已列入 Index暂存区 的待提交的文件。(有时候发现add错文件到暂存区,就可以使用命令)。(3)commit提交某些错误代码,或者没有必要的文件也被commit上去,不想再修改错误再commit(因为会留下一个错误commit点),可以回退到正确的commit点上,然后所有原节点和reset节点之间差异会返回工作目录,假如有个没必要的文件的话就可以直接删除了,再commit上去就OK了。
- 强制回退已push的commit:
应用场景1:已经本地git add,git commit,git push的代码,想要回退到远程分支上某个commit的版本(注意:在强制回退版本之后,git提交记录,回退版本之后的记录都会清除)
git log # 得到你需要回退一次提交的commit id
git reset --hard [commit_id]
git push origin HEAD --force
git revert
- 回退已push的commit:
应用场景:已经push的代码
git log # 得到你需要回退一次提交的commit id
git revert -n [commit_id]
git push -f
git revert 和git reset,在回退已push commit的差异:
git reset 回退后,回退版本之后(即你误push的commit不会显示在git log中,如果有其他人重新拉取你回退版本后的代码,会代码冲突)
git revert 回退后,误push的commit提交记录会保留,并把你误提交的这个commit改动的部分放到stage区域,可视情况重新修改代码,再推送到对应远程分支上
注意:因为回退后,本地的版本已经落后远程分支,git push可能会推送失败,确认好代码没有问题之后,可使用 git push -f 强制推送到远程分支
git取消跟踪文件目录
1.首先 git rm -r -n --cached 文件
只是为了列出你需要取消跟踪的文件,可以查看列表,检查下是否有误操作导致一些不应该被取消的文件取消了,是为了再次确认的。
2. git rm -r --cached 文件
才是真正的取消缓存不想要跟踪的文件
3.在本地仓库的根目录下新建.gitignore 文件。 vi .gitignore
添加你希望忽略的文件/目录
gitignore文件配置记得不是太详细,有需要再查询
4.git commit
提交后,在2步中希望忽略的文件和目录,就不会再
5.git push origin
原文链接:https://blog.csdn.net/sun2009_/article/details/70198580
git 提交代码步骤
https://blog.csdn.net/nimoyaoww/article/details/78985041
idea与git
idea为2019.1.4
- Copy Revision Number复制commit id
- Create Patch…:创建补丁(本地.patch文件)
- Cherry-Pick:将这个commit 应用到本分支(应用后,需要commit差异代码)
- Compare Versions:比较两个commit之间的差异
- Compare with Local:比较commit与本地代码之间的差异
- Checkout Revision:检出此commit
- Show Repository at Revision:展示此commit对应的仓库代码
- Reset Current Branch to Here…:回退代码到此commit(具体视回退模式的选择)
- Revert Commit:回退此commit内容(改动会到version control,需commit,回退的commit记录不会消失)
- Undo Commit…:一般是在分支树的末端,重做该commit(改动会到version control,需commit,回退的commit记录会消失在版本数)
- Reword…:修改commit的提交信息
- Fixup…:?
- Squash Into…:?
- Interactively Rebase from Here…:以此为基点变基
- New Branch…:在此commit基础建新分支
- New Tag… :打标签
- Open on Gitee:打开该commit对应的gitee页面
如果本地代码不是最新的,git pull时会被拒绝,
如果确实因为代码提交错误,已经git push过的commit
后又经过undo,或者reset,需要强推本地到远程分支才能修正错误,
需使用以下命令
git push origin HEAD --force
参考资料:
https://blog.csdn.net/asoar/article/details/84111841
https://www.cnblogs.com/wwzyy/p/12286338.html
https://www.cnblogs.com/aligege/p/10221174.html