第一部分:常用的命令
第一步 :git init
第二步: 如果遇到warning: LF will be replaced by CRLF in b.txt.”
原因是不同系统的回车换行符造成的
需要修改git config core.autocrlf false
第三步: git add.
第四步: git commit -m “”,一定要写注释。
git commit -a -m “”
第五步: 查看状态 git status
第六步: 查看历史
git log
git log --online
将每个提交压缩到一行。当你需要查看项目历史的上层情况时这会很有用。
git log --stat
除了git log信息之外,包含哪些文件被更改了,以及每个文件相对的增删行数。
git log -p
显示代表每个提交的一堆信息。显示每个提交全部的差异(diff),这也是项目历史中最详细的视图。
git log --graph --all
命令行查看不太适合相差太大的分支,分支的共同父节点和分支的当前节点隔开太多
第七步: git checkout 哈希码 可以检出之前的状态,退到之前,git checkout master 又回到当前状态。
第八步: 检出文件
git checkout a1e8fb5 hello.py 旧的文件版本会显示为「需要提交的更改」,允许你回滚到文件之前的版本。如果你不想保留旧的版本,你可以用下面的命令检出到最近的版本:
git checkout HEAD hello.py
第九步: 版本回退的两种办法。
git reset :直接回退到之前的版本,目标版本之后全部消失。
git revert : 只取消目标版本,目标之后的版本依然保留。
参考链接:https://blog.csdn.net/yxlshk/article/details/79944535
第九步: 使用git commit --amend 命令修改上次提交信息。
合并缓存的修改和上一次的提交,用新的快照替换上一个提交。缓存区没有 文件时,运行这个命令可以用来编辑上次提交的提交信息,而不会更改快照。
第十步: 查看log常用命令
git log --graph --pretty=oneline --abbrev-commit
git log --all --decorate --oneline --graph
第十一步:图像化界面 gitk 命令
第二部分
git rebase 合并分支:把你当前分支的 commit 放到公共分支的最后面,所以叫变基。
:将自己的commit取消掉,将中间别人的commit 下载下来,把自己的commit添加到别人的commit之后。
参考链接:https://blog.csdn.net/zzhongcy/article/details/86476160
https://www.jianshu.com/p/4079284dd970
第三部分: 远程仓库
添加远程仓库:git remote add .....
推送远程:git push -u origin master
git remote
git remote -v 和上个命令相同,但同时显示每个连接的 URL。
git remote add <name> <url>:创建一个新的远程仓库连接。在添加之后,你可以将 `<name>` 作为 `<url>` 便捷的别名在其他 Git 命令中使用。
git remote rm <name> /git remote rename <old-name> <new-name> :移除和变名
拉取分支:
git fetch <remote> / git fetch <remote> <branch>
查看分支:
git branch -a
git branch -r
git log origin/master
拉取并合并
git pull :使用 `git fetch`,然后是 `git merge`
推送:
git push <remote> <branch>/git push <remote> --force/git push <remote> --all/git push <remote> --tags
一般过程:先fetch,在变基,再推。
git checkout master
git fetch origin master
git rebase -i origin/master
# Squash commits, fix up commit messages etc.
git push origin master
推送本地其他分支到远程分支:
git push <远程主机名> <本地分支名>:<远程分支名>
git push origin master:master
合并远程的两个分支,不能直接操作远程合并,只能先clone,在本地合并,在推倒远程:
git clone [gitsite git远程网址]
git checkout -b dev origin/dev
git checkout master
git merge dev
git push origin master
第四部分:分支
git branch -r
git branch -a :列出本地与远程所有分支。
git branch:列出本地仓库中所有分支。
git checkout -b <branch>:创建并切换。相当于git branch <branch> git checkout <branch>
git branch -d <branch>:删除指定分支。(删除前要合并)
git branch -D <branch>:强制删除指定分支,即使包含未合并更改。如果你希望永远删除某条开发线的所有提交,你应该用这个命令。
git branch -m <branch>:将当前分支命名为 `<branch>`。
git push origin --delete <branch> :删除远程分支
第五部分:代码合并问题git merge 和 git rebase
https://www.jianshu.com/p/4079284dd970
不要在公共分支使用rebase
本地和远端对应同一条分支,优先使用rebase,而不是merge
通俗的解释一波:比如rebase,你自己开发分支一直在做,然后某一天,你想把主线的修改合到你的分支上,做一次集成,这种情况就用rebase比较好.把你的提交都放在主线修改的头上,
缺点是:你不知道是从哪里拉出来的。
git rebase -I dev 可以将dev分支合并到当前分支
这里的”-i“是指交互模式。就是说你可以干预rebase这个事务的过程,包括设置commit message,暂停commit等等
git rebase –abort 放弃一次合并
调用 `git rebase` 的时候,你有两个基(base)可以选择:上游分支(比如 master)或者你 feature 分支中早先的一个提交。
git rebase -i HEAD~3:你只是将之后的 3 次提交重写了。注意它不会把上游分支的更改并入到 feature 分支中。
第六部分: 代码回滚Reset、Checkout、Revert
换句话说,如果你想扔掉这两个提交,你可以这么做。git reset HEAD~2
命令 | 作用域 | 常用情景 |
---|---|---|
git reset | 提交层面 | 在私有分支上舍弃一些没有提交的更改 |
git reset | 文件层面 | 将文件从缓存区中移除 |
git checkout | 提交层面 | 切换分支或查看旧版本 |
git checkout | 文件层面 | 舍弃工作目录中的更改 |
git revert | 提交层面 | 在公共分支上回滚更改 |
git revert | 文件层面 | (然而并没有) |