目录
1、git pull
2、git commit
3、git clean
4、提交代码时忘记pull
5、提交错分支
6、git push -f
7、git revert
8、git commit 之后有人push
9、保存修改和删除,但是不包括新建文件 git add -u
10、追踪改变
11、git worktree
12、其他命令
13、本地修改的某个文件想要撤回
14、git rebase
15、代码提交到远程,想撤回提交后,代码恢复没有push的状态,上一次更改的代码保留
16、本地分支直接和远程同步
17、修改本地分支以及远程分支名
1、git pull冲突时:
git pull // 发生冲突
git stash
git pull
git stash pop(有冲突解决冲突)
git add .
git commit -m ""
git push
git commit -m "《commit信息错误》"
修改commit信息 git commit - amend -m "《新的commit信息》"
git push即可
git clean 参数
-n 是一次clean的演习, 告诉你哪些文件会被删除. 记住他不会真正的删除文件, 只是一个提醒,
显示 将要 删除的 文件 和 目录
-f 删除 文件
git clean -f <path> 删除指定路径下的没有被track过的文件
-df 删除 文件 和 目录
git clean -xdfe *.txt(使用e删除所有未追踪的出来.txt结尾的文件)
如果有提交在暂存区,那么要撤销可以
git reset --hard
git clean -xdf
如果没有加入暂存区
git checkout . && git clean -xdf
撤销commit --------- girt reset --hard HEAD^
撤销add ---------- git reset HEAD
重新 pull add commit
git checkout 分支
git cherry-pick 相应节点
add commit push
git revert HEAD 撤销前一次 commit
git revert HEAD^ 撤销前前一次 commit
git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进 行保存)
git revert commit_id
//如果commit_id是merge节点的话,-m是指定具体哪个提交点
git revert commit_id -m 1
//接着就是解决冲突
git add -A
git commit -m “…”
git revert commit_id -m 2
//接着就是解决冲突
git add -A
git commit -m “…”
git push
git pull -r
git push
保存新的添加和修改,但是不包括删除 git add .
保存所有文件git add -A
试一下git fsck --lost-found操作吧
这条信息参考https://www.cnblogs.com/hope-markup/p/6683522.html
比如如果你的项目有很多个版本分支,在git worktree出现之前, 为了维护不同版本你就需要频繁切换本, 如果项目还不小的话, 切换成本还是不小的。
以我前端为例,由于node_modules文件夹被忽略无法被跟着分支来回切换,导致切换不同版本后还需要重新安装npm,很麻烦。这时使用git worktree将分支检出到另外其他文件夹就可以避免这个问题。将分支用git worktree检出到其他文件夹的好处很明显::可以同时维护多个分支代码、可以对比不同分支的代码行为等等
git worktree add -b <新分支名> <新路径> <从此分支创建>
例如:
1、现在正在develop
分支开发,希望从master
分出一个分支来解决某个紧急的BUG
:
git worktree add -b newbranch …/bugfix master
2、不希望添加分支,只建立文件夹情况:git worktree add …/folderName
这样,原本的仓库文件夹的同级目录下会出现一个 bugfix
文件夹。这个仓库里只有一个.git
文件用来记录这是主仓库的一个工作目录。
自此,这两个工作目录在工作上看起来就像两个独立的仓库一样,都可以运行各种命令,包括切换分支。
打开新的文件夹bugfix
,可在里面切换分支直接开发,因为是同一个.git
文件,在此文件夹中的操作就和原来的一样
相比于克隆多个仓库,使用这种方法创建的多个目录,有诸多好处:
1、只有一个仓库会占用版本库的空间,其它只占用工作目录的空间,对大型项目而言非常节省空间。
2、因为所有工作目录共享一个仓库,所以一个更新意味着整个更新(A
目录里对分支做的改动,B
目录里切到此分支也是改动后的;避免到时候找不到某个未推送的改动改到了哪个仓库)
注意事项
使用 git worktree
创建的多个目录,不能有任何两个目录在同一个分支下。
如果要删除其中一个工作目录,直接删除文件夹即可。随后使用命令清除多余的已经被删的工作目录:
用git worktree prune来清理已不存在的关联工作目录的记录文件。
查看:git worktree list
文件rebase之后有冲突,那么可以用git checkout --(theirs/ours)
git update-index --assume-unchanged /path/to/file #忽略跟踪
git update-index --no-assume-unchanged /path/to/file #恢复跟踪
git update-index --really-refresh查看当前索引并通过检查信息查看是否需要合并或更新。
例如: 需求是我和同事合作开发一个项目。同事要新建一个分支,然后,我这边拉取这个分支即可。
然而同事新建分支并且推送到远程仓库之后,我这边通过git branch -a并不能看到这个分支。那么可以用:
git fetch( 获取远程仓库的新分支)
git fetch -p(删除远程仓库已删除的分支)
可参考大全:https://blog.csdn.net/trochiluses/article/details/14519303
从分支或者索引中检索文件到当前目录:
项目中遇到把本地first-content文件还原成远程master的first-content文件,就进行了某个指定文件的回退
用rebase之后的分支更干净,如果rebase之后有冲突,那么解决冲突之后应该是git rebase --continue,如果忘记了,写成了git add .等等,那么rebase显示变基中的情况下,可以用git rebase --abort退出rebase模式,回到rebase之前的状态。
git rebase --skip表示跳过当前冲突。
我本地有更改 准备提交
然后我git stash
然后我需要rebase develop分支
我就直接 git pull --rebase origin develop
然后git stash pop 解决冲突
然后 add commit push
这样就不需要切到另一个分支,pull代码再切到当前分支rebase后解决冲突了
17、修改本地分支以及远程分支名
一、git branch -m old_branch new_branch 修改本地分支
二、 git push origin :old_branch 删除远程分支
三、 git push --set-upstream origin new_branch 新增远程分支