git 开发中常见误操作及个人认为的最佳解决办法
概要
这篇文章记录的是在使用git
过程中遇到的问题及我的解决办法,普通的使用这里不会记录,遇到了更多问题之后我会来更新这篇文章。
commit
时选错了对应文件
提交记录一般只做一件事情就好,可以的话,适当的细分是很有必要的,当然对应的关联的改动文件也要正确,但是如果是一次改动中动了多个文件,但是改了两个需求,又想分两次提交,当然是多选该功能改动的文件然后写commit log
,但是如果不小心选错了或者多选择了不相关文件并已经commit
了的话,可是使用git reset
来恢复,先git log
复制最新一次的上一次的commit id
,执行git reset --soft desc_commit_id
,此时代码便会恢复到你刚刚提交之前,改动都还在但是错误的 commit log
不见了,这是强迫症最舒服的地方,此时你可以重新选择文件再次提交,干净的commit log
是不是很舒服?
注意git reset
是有点危险的操作,在不确定是否一定抛弃已有改动,不要使用git reset --hard
,注意这里的参数,--hard
和--soft
,前者会恢复到当次 commit id
并且discard
了commit id
之前所有的commit id
的改动,如果远程端没有记录,那么你将丢失未保存的所有改动,切记切记;而后者只会删除你不需要的commit log
,但是该commit id
之前所有的commit id
的改动都还在,只是’commit log’被清了,此时你可以重新写log
,如果已经推送到了远程,发现很及时的话,先git pull
最新代码,确保没有同事新提交过代码,直接用reset
之后的记录覆盖远端,如果有同事提交了,可以git reset --soft
之后cheery pick
该记录再覆盖远端。
慢慢细读并跟着走的话应该可以看懂了,这里还是实例记录下:
☁ Desktop mkdir example
☁ Desktop cd example
☁ example git init
Initialized empty Git repository in /Users/VanJay/Desktop/example/.git/
☁ example [master] git add .
☁ example [master] git clone https://github.com/dracula/xcode.git
☁ example [master] git commit -m "Initial commit"
On branch master
Initial commit
nothing to commit
☁ example [master] git log
fatal: your current branch 'master' does not have any commits yet
☁ example [master] touch a.file
☁ example [master] ⚡ git add .
☁ example [master] ⚡ git commit -m "Added a.file"
[master (root-commit) fa2ed5d] Added a.file
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a.file
☁ example [master] git log
☁ example [master] touch b.file
☁ example [master] ⚡ touch c.file
☁ example [master] ⚡ git add .
☁ example [master] ⚡ git commit help
error: pathspec 'help' did not match any file(s) known to git.
☁ example [master] ⚡ git commit --help
☁ example [master] ⚡ git commit -m "Added b.file"
[master 0a03cd8] Added b.file
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 b.file
create mode 100644 c.file
☁ example [master] git log
☁ example [master] git reset --soft fa2ed5d01756b3b63b00488418c1a73eb30c4d66
☁ example [master] ⚡ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: b.file
new file: c.file
☁ example [master] ⚡ git log
可以看到在提交了 b.file
和c.file
之后恢复了之前的状态,git log
查看只有一次commit log
了,这个时候可以重新写log
提交。