usage: git [--version] [--help] [-C <path>] [-c name=value]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
<command> [<args>]
These are common Git commands used in various situations:
start a working area (see also: git help tutorial)
clone Clone a repository into a new directory
init Create an empty Git repository or reinitialize an existing one
work on the current change (see also: git help everyday)
add Add file contents to the index
mv Move or rename a file, a directory, or a symlink
reset Reset current HEAD to the specified state
rm Remove files from the working tree and from the index
examine the history and state (see also: git help revisions)
bisect Use binary search to find the commit that introduced a bug
grep Print lines matching a pattern
log Show commit logs
show Show various types of objects
status Show the working tree status
grow, mark and tweak your common history
branch List, create, or delete branches
checkout Switch branches or restore working tree files
commit Record changes to the repository
diff Show changes between commits, commit and working tree, etc
merge Join two or more development histories together
rebase Reapply commits on top of another base tip
tag Create, list, delete or verify a tag object signed with GPG
collaborate (see also: git help workflows)
fetch Download objects and refs from another repository
pull Fetch from and integrate with another repository or a local branch
push Update remote refs along with associated objects
常用命令
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:
此外,Git 还会尝试找寻 /etc/gitconfig 文件,只不过看当初 Git 装在什么目录,就以此作为根目录来定位。
项目的描述文件,例如,包含作者信息,组织信息,安装方法,使用说明等
忽略文件或目录,不上传到远程仓库。
例如,配置用户名和邮箱
git config --global user.name "FrankYu"
git config --global user.email [email protected]
git clone https://gitee.com/frankyu365/learngit.git
添加src目录
使用pycharm打开目录,添加源代码,虚拟环境
git status
git add .
git reset HEAD
我们发现git add添加.idea下面的文件到缓存区了,我们并不需要
之后运行
git add .\src\main.py
git diff --cached
git commit -m 'add main.py'
git push
查看远程仓库
可以看到仅添加了main.py,没有.idea目录。如果只是个人使用,项目不复杂,只会前面的操作基本就可以了。如果多人合作,项目比较大,就涉及到版本管理、权限控制、分支管理、冲突解决等问题。
git毕竟是多人合作的,所以还要考虑冲突、权限、分支管理等
查看status
现在,修改远程仓库的.gitignore文件,模拟其他合作者修改后push到远程仓库的情况
之后,我们运行一下命令
git pull
我们先创建一个nothing.txt文件
之后,我们在本地(工作区)删除
假设我们是不小心删除的,现在工作区没有了,如何找回呢?
git checkout -- nothing.txt
git rm nothing.txt
git commit -m 'delete nothing.txt'
git push
就可以删除了
git branch
默认是只有master分支的。查看远程仓库的分支,添加-r选项
git branch -r
git branch test
git checkout test
在创建分支的情况下,push到远程仓库
git push origin test
假设我是测试人员,只修改test分支,那么如何克隆某一个分支呢?
git clone --single-branch --branch test https://gitee.com/frankyu365/learngit.git
修改main.py,其他操作都是一样的。
现在本地有两个clone,一个是单分支test,与远程仓库一致,一个是双分支,test分支与远程仓库不一致。
git pull origin test:test
这时你会发现,两个分支的内容不一样,切换分支时,目录下的文件也会改变。
标签与commit挂钩,类似一个别名
git tag -a v1.0 -m "version 1.0 released"
-a后加标签 -m后加注释
注意:默认将标签打到最新的commit上,需要在之前的commit上打标签,可以后面加上commit id,commit id获取可以看日志部分,
标签列表
git tag
标签信息
git show v1.0
git push origin v1.0
本地删除
git tag -d v1.0
远程删除
git push origin :refs/tags/v1.0
git log
总有朋友学习git的时候认为修改同一个文件会出冲突,其实不是的
远程修改main.py 并提交
本地修改main.py
本地 git push
可以看到被拒绝了,请先fetch,也就是获取(git pull),因为远程仓库有本地没有的修改
之后,我们git pull
可以看到已经自动merge 了
看本地文件内容,可以看到git很聪明的将远程和本地的内容合并到了一起,我们再次push
可以看到成功了,远程仓库也有了。
那么为什么有的朋友几个人修改一个分支还会有冲突呢?
我们修改远程的代码并提交
之后可以看到commit id
修改本地文件的同一行内容
git push发现和之前一样,但是git pull后却发现自动merge失败,出现了冲突!!!
查看文件,可以看到增加了很多内容
每个冲突地方的格式如下:
<<<<<<< HEAD
本地工作区内容
=======
远程仓库内容
>>>>>>> 远程仓库提交时的commit id
可以看到修改同一个文件的同一行时会出现冲突,因为git不知道到底需要保留哪一个。这个时候就需要你们自行商量,解决后再push。具体如何做呢?
我们终止merge,因为无法自动merge,然后再次pull
git merge --abort
git pull --rebase
可以看到一些提示,手动解决冲突后,在git add/rm,然后git rebase --continue。之后就正常了。此时查看git status也是差不多的提示。
git push时注意,没有在分支上,push后再切换回分支即可。
可以看到已经正常了
同分支git push出现问题解决步骤:
创建test分支后,修改了master分支,一般都是把其他分支合并到master分支,我们先制造冲突
修改test分支
切换test并pull下来
在master分支合并
发现冲突,解决后add,commit,push即可
push结果如下:
总结如下:
如果某文件已在远程仓库中,想忽略后续更改,.gitignore不生效,需要git add时忽略。
如果此文件不需要在远程仓库中,可以git rm --cached <文件路径>后添加到.gitignore。
1.单分支修改同一个文件的不同行不会发生冲突
2.单分支修改同一个文件的相同行会发生冲突
3.当文件行数 只有 2 行时,不同分支修改同一个文件的相同行会发生合并冲突
4.当文件行数 只有 2 行时,不同分支修改同一个文件的不同行会发生合并冲突
4.当文件行数 大于 2 行时,不同分支修改同一个文件的不相同且非相邻行不会发生合并冲突
5.当文件行数 大于 2 行时,不同分支修改同一个文件的相同或相邻行会发生合并冲突
git clone --single-branch <仓库URL> <本地目录> --branch <分支名>
克隆单分支可以减少空间
更多问题欢迎在评论区评论!!!
git-windows安装包
git-scm.com
git书籍