git的基础命令
git clone
git checkout -b develop origin/develop 与远程分支建立跟踪关系
git status
git add .
git commit -m ""
git push
也可以用gitlens
gitlens 错误的commit 不想commit 但是不能丢失自己的 修改
gitlens 再上一个commit resert 头commit 就可以了 需要注意的是 这里的--soft 这个 就会保存自己的修改 如果是 hard就不会了
合并分支 git merge <BranchName> --no-ff [-m 'xxx'] 在主分支上不会有历史 但是原分支保留历史 第一句可以理解 在dev上 不会有分支的提交记录 但是 第二句 不是很理解我
这时候要注意看 有时候会出现提示信息 让你声明你的身份 name 和email 按照提示 输入即可
git push origin develop 这里可以推送到任意分支 不过一般都是前后对应 下拉某一分支 推送到某一分支(只修改这一分支)
如果checkout已经建立了跟踪关系 这里origin develop是可以省略的 因为前面建立的跟踪关系这里会默认使用
开发的环境中有些东西我们 不想提交 可以修改.gitignore文件 也可以不适用git add . 一个一个文件单独添加(比如一些测试环境 工作的时候测试环境不一样的)
代码恢复 (个人感觉很重要 因为会由于自己或者他人误操作造成自己的努力付之东流 以前我老大也试过但是代码冲突比较多)
总结一下使用 git revert 绝对的安全 不影响每一个版本的代码历史 恢复基本上没有冲突
使用
1.先 git log --oneline 展示历史版本 如果使用git log 显示过多 退出的话 按英文状态下的q即可
2.然后 git revert HEAD~数字 这里是撤销的意思 我理解为撤销前几次提交的操作 如果是0
git revert HEAD~0 意为 撤销最后一次提交之后的操作(恢复到了最后也就是最近一次提交的代码)
如果是1 HEAD是当前 1是撤销上一次的修改(撤销了0b6b309的修改) 则回到了46f62b5的那一次修改
然后git status 查看 发生了哪些改变
有冲突的话 修改冲突(我使用的是vscode 自动弹出采用当前更改 和采用传入的更改选择 因为是代码恢复 直接选择传入更改即可)
当状态变为
可以使用git revert --abort 强行终止撤回 也可以最后修改 然后git add. git commit -m "" 之后状态也会变回来
出现
输入:wq 回车 即可退出
另一种代码恢复 恢复到某个版本id reset 需要注意的是 恢复此id之后的 版本将被删除
比如 提交了三次修改 git reset id号(第一次的)
这样后面两次的记录会被删除
当出现提示错误的时候(Unstaged changes after reset )
git add .
git reset --hard
使用这样本地代码恢复了 但是远程代码却不能提交
$ git push -u origin master
To git@github.com:******/Demo.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'git@github.com:******/Demo.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
网上搜索了下,是因为远程repository和我本地的repository冲突导致的,而我在创建版本库后,在github的版本库页面点击了创建README.md文件的按钮创建了说明文档,但是却没有pull到本地。这样就产生了版本冲突的问题。
有如下几种解决方法:
1.使用强制push的方法:
$ git push -u origin master -f
这样会使远程修改丢失,一般是不可取的,尤其是多人协作开发的时候。
2 我个人想到的一个办法 先git reset 本地工作目录恢复到需要的代码
然后在git clone 或者git pull 然后把恢复的代码复制过来 在提交