Git HowTo
查看某个文件的修改
git log -p filename
git blame filename是查看目前的每一行是哪个提交最后改动的,最好通过less管道输出
查看每个commit都对那个文件做了修改
git log --stat
撤销:
-------------------
1) 撤销修改,但是还没有commit
git checkout
2) 撤销已经commit的修改
git reset --soft <commit>
git reset --hard <commit>
3) Revert some existing commits
git revert
例如git revert HEAD,恢复最后一个commit的修改
4) If you just want to restore just one file, say your hello, use git-checkout
$ git checkout -- hello
$ git checkout HEAD hello
The first command restores hello to the version in the index, so that
“git diff hello” returns no differences. The second command will restore
hello to the version in the HEAD revision, so that both “git diff
hello” and “git diff —cached hello” return no differences.
git rm --cached
git rm 会删除index的同时也会删除文件,--cached就不会了,但是你commit,push了以后远端仓库也没有相应的文件了
pull/push
-------------------------------------------------------------------
git diff HEAD^ HEAD > name.patch
git apply --check -v name.patch
git apply name.patch
Download src:
git clone steven@project:/home/pm.git/projectname
#git config --global user.name "Steven Yang"
#git config --ail "mqyoung@gmail"
git config user.name "your name"
git ail yourname@email_server
git config core.editor vim
git config core.paper "less -N"
git config color.diff true
git checkout
git diff tag                    比较tag和HEAD之间的不同。
git diff tag file              比较一个文件在两者之间的不同。
git ag2            比较两个tag之间的不同。
git diff SHA11..SHA12          比较两个提交之间的不同。
git diff tag1 tag2 file or
git diff tag1:file tag2:file    比较一个文件在两个tag之间的不同。
log:
----------------------------------------------------------
git log file                    查看一个文件的改动。
git log -p                      查看日志和改动。
git ag2              查看两个tag之间的日志。
git log -ag2 file      查看一个文件在两个tag之间的不同。
git log tag..                  查看tag和HEAD之间的不同。
git commit -a -e        提交全部修改文件,并调用vim编辑提交日志。
git reset HEAD^ or
git reset HEAD~1        撤销最后一次提交。
git reset --hard HEAD^  撤销最后一次提交并清除本地修改。
git reset SHA1          回到SHA1对应的提交状态。
Update:
git pull
Add:
git add [filename]
git add *
git commit -a -m "comment"
git push
#更详细的log
git log -p
#create a new branch
git branch my_new_branch
#show your branches
git branch
#switch to your branch
git checkout my_new_branch
#merge the master code with into the branch code
#If conflict occur, please do the merge manually
git checkout master
git merge my_new_branch
#Delete a branch
git branch -d my_new_branch    //Delete a branch. The branch must be fully merged in HEAD.
git branch -D my_new_branch    //Delete a branch irrespective of its merged status.
git reset --soft HEAD^ 撤销最近一次提交
#See the type of the commit
steven@steven:~/xmlinux$ git cat-file -t 19f00f070c17584b5acaf186baf4d12a7d2ed125 commit
#See more info
steven@steven:~/xmlinux$ git show 19f00f070c17584b5acaf186baf4d12a7d2ed125
#Create a tar archive that contains the contents of the latest commit on the current branch, and extracts it in /tmp/junk directory.
git archive --format=tar --prefix=junk/ HEAD | (cd /tmp/ && tar xf -)
Refer:        linux.die/man/1/git-archive
强行切换到某一分支:
git checkout -f branch_name
git push相关
============
$ git push ssh://git@dev.lemote/rt4ls.git master // 把本地仓库提交到远程仓库的master分支中
$ git remote add origin ssh://git@dev.lemote/rt4ls.git
$ git push origin master
这两个操作是等价的,第二个操作的第一行的意思是添加一个标记,让origin指向
ssh://git@dev.lemote /rt4ls.git,也就是说你操作origin的时候,实际上就是在操作
ssh://git@dev.lemote/rt4ls.git。origin在这里完全可以理解为后者的别名。
需要说明的是,默认情况下这条语句等价于提交本地的master仓库到远程仓库,并作为远程的master分支。
如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test 的分支,那么可以这么做。
$ git push origin test:master        // 提交本地test分支作为远程的master分支
$ git push origin test:test              // 提交本地test分支作为远程的test分支
如果想删除远程的分支呢?类似于上面,如果:左边的分支为空,那么将删除:右边的远程的分支。
$ git push origin :test              // 刚提交到远程的test将被删除,但是本地还会保存的,不用担心
Git获取远程分支
==============
同学的循循善诱之下,决定采用GIT,这开始项目的优化和重构,鉴于第一版混乱的版本控制,在TualatriX“”
几天来回倒腾,算上手了,不过刚才小3来了之后遇到个小问题:不知道怎么clone回远程的分支。。。
事情是这样的,这之前因为小3同学开车车去了,所以只有我一个人在往服务器上push,然后今天他来,
clone
分支,顿时囧翻其他分支怎么就不回来呢.百google度,哈,有学回来,branch以下才发现只有master……
了一招,原来是这样的:
通过git clone获取的远端git库,只包含了远端git库的当前工作分支。如果想获取其它分支信息,需要使用git branch  –r” ”
来查看,如果需要将远程的其它分支代码也获取过来,可以使用命令git ”
本地分支名远程分支名,其中,远程分支名为git branch –r所列出的分支名,一般是诸如checkout -b ”
分支名的样子。如果本地分支名已经存在,则不需要-b”参数。
“origin/”“
Create a new project(git repository)
------------------------------------------------------------------
Server:
#su steven
mkdir newproject.git
cd newproject.git
git --bare init
Client:
mkdir newproject
cd newproject
git init
touch NewFile
git add NewFile
git commit -a -m "This is the test!"
git remote add origin steven@project:/home/pm.git/newproject.git
git push origin master
Edit the config file on server /home/pm.git/vpn.git/config
_________________________________________________
[core]
repositoryformatversion = 0
filemode = true
bare = true
sharedrepository = 1
[receive]
denyNonFastforwards = true
_________________________________________________
GIT 高级使用
----------------
使用Git 管理源代码
www.ibm/developerworks/cn/linux/l-git/
Git 中文教程
www.bitsun/documents/gittutorcn.htm
获得最新的内核源代码树
git-clone git:///pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-2.6
更新本地Git 仓库
cd linux-2.6
git-pull git:///pub/scm/linux/kernel/git/torvalds/linux-2.6.git 从仓库中导出文件
git-checkout
git-checkout -f
管理分支
git branch branch-name
git checkout branch-name
删除分支
git branch -D branch-name
查看分支
git branch
git branch -a
查看目前工作的分支
cat .git/HEAD
查看项目的发展变化和比较差异
git-show-branch -版本库的发展记录
git-diff        -可以看到这两个版本的差异
$ git-diff master^ branch-name
git-whatchanged -看看某个分支是怎么发展的
$ git-checkout master
$ git-whatchanged
合并两个分支:git-merge
$ git-checkout master
vimtag$ git-merge "Merge work in robin" HEAD branch-name
$ git-checkout master
$ git-pull . robin
逆转与恢复:git-reset
标定版本
轻标签
$ git-tag my-first-tag
$ git-tag mytag f0af6283824688f9d23426031734657661b54388
署名标签
$ git-tag -s <tag-name>
合并外部工作
git fetch <remote-repository>
通过交换工作
用Git 协同工作
为版本库打包
发布你的工作
将工作捆绑到一起
管理版本库
clonet linux仓库,然后上传到服务器,在服务器上创建branch并管理
----------------------------------------------
Step 1: (GIT Server)
mkdir xmlinux.git
cd xmlinux.git/
git --bare init
chmod -R g+w objects
chmod -R g+w refs
Step 2: (GIT Client)
git clone git:///pub/scm/linux/kernel/git/stable/linux-2.6-stable.git
#Here I use unfied repository of the stable branch ...
#OR
#git:///pub/scm/linux/kernel/git/torvalds/linux-2.6.git xmlinux
#git:///pub/scm/linux/kernel/git/stable/linux-2.it
cd xmlinux/
git commit -a -m "Initial Linux kernel master repository"
git remote add project steven@project:/home/pm.git/xmlinux.git/
git push project master
#Create new branchs
-------------------------
git branch xmlinux-2.6.17.4 4f9619cdd90ac846fa0ca6e9e8a9d87a0d6b4f57
git tag stable-2.6.23.17 6531868a73a6c91bf0e3e60ded7d1440ee24dfa8
git branch xmlinux-2.6.23.17 stable-2.6.23.17
git checkout xmlinux-2.6.17.4
patch --dry-run -p1 < ../xtratum_linux_2.6.17.4.patch
patch -p1 < ../xtratum_linux_2.6.17.4.patch
git add .
git commit -a
#edit the comment
git remote add project steven@project:/home/pm.git/xmlinux.git
git push project xmlinux-2.6.17.4:xmlinux-2.6.17.4
#Archive the source code
-----------------------
git checkout xmlinux-2.6.17.4
git archive --format=tar --prefix=junk/ HEAD | (cd /tmp/ && tar xf -)
#Merge into the current branch the remote branch xmlinux-2.6.32.11
-
---------------------
git pull project xmlinux-2.6.32.11
problem 1
=========
问题现象:push不上去,信息如下
root@steven:~/spectrum/git/spectrum# git push
Password:
Counting objects: 15, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (10/10), done.
Writing objects: 100% (10/10), 753.33 KiB, done.
Total 10 (delta 3), reused 0 (delta 0)
error: insufficient permission for adding an object to repository
database ./objects
fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To steven@project:/home/pm.git/spectrum.git
! [remote rejected] master -> master (n/a (unpacker error))
error: failed to push some refs to
'steven@project:/home/pm.git/spectrum.git'
登上去发现objects下面属于我的文件有组可写权限,属于nicho的文件没有组可写权限,所以我不能更改他创建的文件(也有可能是fastforward的问题)。解决方法:
更换config
原文件------------------

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。