Git基本

99 阅读4分钟

Git基本命令

git add

暂存区的目录树会被更新,同时工作区修改或新增的文件内容会被写入到版本库中的一个新的对象中,并且该对象的id被记录在暂存区的文件索引中。    

git commit

暂存区的目录树会写到版本库中,master分支会做相应的更新,即master最新指向的目录树就是提交时原暂存区的目录树。

git reset HEAD

暂存区的目录树会被重写,会被master分支指向的目录树所替换,在reset默认mixed模式下工作区不受影响。       

git checkout . 或 git checkout

会用暂存区全部的文件或指定的文件替换工作区的文件。这个操作会清除工作区中未添加到暂存区的改动。           

git checkout HEAD . 或 git checkout HEAD

会用HEAD指向的master分支中的全部或部分文件替换暂存区和工作区中的文件。这个命令也是极度危险的。因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

git rm --cached

会直接从暂存区删除文件,工作区则不做出改变。

git删除大文件

 git rev-list --objects --all | grep db0eb0b910e3633fa73a7dadfdc0f3deeee686f5
 
 git filter-branch -f --tree-filter 'rm -f dw_spark_task/target/dw_spark_task-1.0-SNAPSHOT-jar-with-dependencies.jar' --tag-name-filter cat -- --all
 
 如果在 git filter-branch 操作过程中遇到如下提示,需要在 git filter-branch 后面加上参数 -f(出现这个错误的原因是,第一次操作成功后发现仓库大小并没有减少 (可能还增大了),便进行了第二次操作)
​
Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f

Git实践

git init
git pull --rebase origin master
git push -u origin master

git冲突代码合并

选择应用的分支,将线上的代码进行Merge

应用完将代码push到线上

分支创建

在New Branch Name输入分支名称,点击Create按钮就可以构建分支,这里根据项目的大小需要一些时间

Git回滚代码到某个commit

$ git reset --hard HEAD^         回退到上个版本
$ git reset --hard HEAD~3       
 回退到前3次提交之前,以此类推,回退到n次提交之前
$ git reset --hard commit_id     退到/进到 指定commit的sha码

$ git push origin HEAD --force 强推到远程

远程代码回退

git log -5
git reset --hard 474a23432ffd9dcd815e12297ac6cf49eb2cbe69
git push origin :develop
git push origin develop

配置python项目

安装 python环境

创建项目

下载库

python -m pip install -U pip
pip install numpy

GIT问题

The following untracked working tree files would be overwritten by checkout

git解决error: The following untracked working tree files would be overwritten by checkout

在IDEA中进行分支切换时,出现如此错误,导致无法正常切换:error: The following untracked working tree files would be overwritten by checkout

通过错误提示可知,是由于一些untracked working tree files引起的问题。所以只要解决了这些untracked的文件就能解决这个问题。

解决方式: 打开SourceTree通过命令行,进入本地版本仓库目录下,直接执行

   git clean -d -fx              

即可。可能很多人都不明白-d,-fx到底是啥意思,其实git clean -d -fx表示:删除 一些 没有 git add 的 文件;

git clean 参数

-n 显示将要删除的文件和目录;

-x -----删除忽略文件已经对git来说不识别的文件

-d -----删除未被添加到git的路径中的文件

-f -----强制运行

refusing to merge unrelated histories

如何去解决fatal: refusing to merge unrelated histories

我在Github新建一个仓库,写了License,然后把本地一个写了很久仓库上传。

先pull,因为两个仓库不同,发现refusing to merge unrelated histories,无法pull

因为他们是两个不同的项目,要把两个不同的项目合并,git需要添加一句代码,在git pull,

这句代码是在git 2.9.2版本发生的,最新的版本需要添加--allow-unrelated-histories

 git pull origin master --allow-unrelated-histories    

untracked working tree file

untracked working tree file 问题解决

展开

error: Entry ‘code/fe/output/conf/smarty-conf/crm_common-map.json’ would be overwritten by merge. Cannot merge.
Updating 7c8a97b..e91c906
error: Untracked working tree file 'shell/import_tables/app_receive_tasks.java' would be overwritten by merge.  Aborting

需要执行下面的命令才能修复:

 git reset --hard HEAD git clean -f -d git pull              

Your local changes to the following files would be overwritten by merge

用git pull来更新代码的时候,遇到了下面的问题:error: Your local changes to the following files would be overwritten by merge: xxx/xxx/xxx.php Please, commit your changes or stash them before you can merge. Aborting

步骤如下:

通过git stash将工作区恢复到上次提交的内容,同时备份本地所做的修改,之后就可以正常git pull了,git pull完成后,执行git stash pop将之前本地做的修改应用到当前工作区。

git stash 
git pull 
git stash pop