0%

git

learning git

自己之前已经学过一次git了,但是最近在用的时候,仍然感觉不顺手,所以今天趁这个机会,再学一遍,这一次,以命令为主,以原理为辅。

初始化仓库

1
$ git init

文件到Git仓库

1
2
$ git add readme.txt
$ git commit -m "wrote a readme file"

查看状态

1
git status

git diff 查看修改内容

1
2
3
4
5
# 对比的是本地工作目录和暂存区的差别
git diff readme.txt

# 对比暂存区和本地仓库之间的差异
git diff --staged readme.txt

查看提交日志

1
git log

版本回到过去和将来

1
2
3
4
5
6
7
8
9
10
# 回到过去
git reset --hard HEAD^
# HEAD~100
# 此时git log已经没有了最新版本的提交信息

# 回到将来
git reset --hard 1094a
# 或者
git reflog # 命令历史
git reset --hard 1094a

撤销修改

1
2
3
4
5
6
7
8
9
# 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时
git checkout -- readme.txt
# 当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,即已经git add
git reset HEAD readme.txt
git checkout -- readme.txt

# 取消 git commit
git reset --soft HEAD^ # commit_id # 只取消上一次commit
git reset --hard HEAD^ # 取消上一次commit和add,删除本地工作区的改动

删除文件

1
2
3
4
5
6
# 情况一:删除已经跟踪的文件:本地工作目录删除本地文件,并且在本地仓库删除文件
git rm test.txt # 本地和暂存区同时删除文件
git commit -m "remove"

# 情况二:log.txt被跟踪,删除在暂存区的跟踪情况,但是同时保留在本地工作目录中
git rm --cached log.txt # 只删除暂存区的文件,不删除本地文件

远程仓库克隆

1
git clone git@github.com:michaelliao/gitskills.git

添加远程仓库

1
2
3
4
5
6
# git://不支持push
git remote add origin git://github.com/TJJTJJTJJ/ticgit.git
# git@只是push
git remote add origin git@github.com:TJJTJJTJJ/ticgit.git
# remove
git remote remove origin

查看远程版本

1
git remote -v

提交到远程

1
git push -u origin master

获取远程仓库内容

1
2
git fetch origin
git merge origin/master

提交远程仓库

1
git push origin master

本地创建分支并跟踪远程分支

1
2
3
git checkout -b sf origin/serverfix # 本地创建分支并跟踪远程分支
git branch -u origin/serverfix # 设置已有的本地分支跟踪一个刚刚拉取的分支
git branch -vv # 查看跟踪分支

git 当前遇到的问题

问题:两台电脑对同一个分支修改,如何解决冲突

开发人员A、B,同时对文件file1修改,此时应该怎么操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 开发人员A对file1修改完成之后
git add .
git commit -m "v1"
git push origin master:master

# 开发人员B对file1修改完成之后
# 先拉去一份最新的远程代码到本地,然后将本地两个版本的代码合并,最后发布一份新版本代码到远程。
git add .
git commit -m "v1" # 先保存到本地仓库 master
git fetch origin master # 本地仓库的origin/master分支会更新到最新
git merge origin/master # 会有冲突,解决冲突
git add .
git commit -m "v3" # 再保存一遍,
git push origin master:master

多次add,一次 commit;多次commit,一次push

问题:分支合并时,master分支已经迭代了几个版本,如何解决合并的冲突

1
2
# 思路类似:先拉去一份最新的远程代码到本地,然后将本地两个版本的代码合并,最后发布一份新版本代码到远程。

添加远程

1
2
3
4
5
6
git remote add origin git@github.com:TJJTJJTJJ/git_learn.git

# 跟踪分支
git checkout -b sf origin/serverfix # 新建分支并跟踪远程分支
git branch -u origin/serverfix # 已经有本地分支,本地分支跟踪远程分支
git branch -vv # 查看分支